代码之家  ›  专栏  ›  技术社区  ›  Lukas Oppermann

CodeIgniter库多个实例

  •  2
  • Lukas Oppermann  · 技术社区  · 16 年前

    我的codeigniter库有问题。为了将数据库数据转换为导航并具有活动元素,例如,我构建了一个库类CI\u navigation()。 它工作得很好,我只有一个问题。

    通常在网页上有一个对应但分开的导航,例如顶部的主导航和侧面的子导航。为了解决这个问题,我可以用一个参数来初始化我的类,告诉它这个导航要保持哪个级别。 例如,我会做这样的事情。

    $this->load->library('Navigation');
    
    $main = $this->navigation->build( array('levels'=>array(0)) );
    $sub = $this->navigation->build( array('levels'=>array(1,2)) );
    

    正如您所料,它不起作用,因为类中的数据保持第一次调用build时分配的方式。

    可悲的是,在CodeIgniter库中是单例的(对吧?这就是我读到的)。所以我不能像这样两次初始化它:

    $this->load->library('Navigation','','main');
    $this->load->library('Navigation','',sub);
    

    你知道我怎样才能克服这个问题吗。

    例如,对于选项而不是使用$this->选项I必须动态创建$this->$选项[0],$this->$选项[1]。

    提前谢谢各位。

    2 回复  |  直到 16 年前
        1
  •  7
  •   Elliot    16 年前

    如果您想坚持严格的CI库实现,那么我建议您将类参数设置为一组配置;然后指定要在“build”函数中使用的配置。

    $options = array
    (
      'main' => array('level' => 0),
      'sub' =>array('level' => 1)
    );
    
    $this->load->library('navigation', $options);
    
    $main_nav = $this->navigation->build('main');
    $sub_nav = $this->navigation->build('sub');
    

    但对于这类事情,我经常使用标准对象:

    $a_navigator = new Navigation($options_a);
    $b_navigator = new Navigation($options_b);
    
    $a_tree = $a_navigator->build();
    $b_tree = $b_navigator->build();
    
    unset($a_navigator);
    unset($b_navigator);
    
        2
  •  0
  •   miro    11 年前

    或者你可以这样做:

    $this->load->library('navigation');
    $this->another_navigation = clone($this->navigation);