CodeIgniter库有多个实例

时间:2010-06-01 08:06:25

标签: php codeigniter oop

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

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

$this->load->library('Navigation');

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

正如您可能认为它不起作用,因为类中的数据保持了第一次调用构建时分配的方式。

令人遗憾的是CodeIgniter中的库是单例(对吗?这就是我所读到的)。所以我不能将它初始化两次,如:

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

你知道如何克服这个问题。

如果我将数组用于类中使用的变量,它应该可以工作吗? 例如。对于选项而不是使用$ this->选项,我必须动态创建$ this-> $ option [0],$ this-> $ option [1]。

这有用吗?我现在无法测试它,但今晚会这样做。但这不是一种非常优雅的方式,那么有更好的方法来解决这个问题吗?有什么方法可以多次初始化库吗?

先谢谢你们。

2 个答案:

答案 0 :(得分:7)

如果你想坚持严格的CI库实现,那么我建议你让你的类参数成为一组配置;然后指定要在“构建”功能中使用的配置。

$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);

答案 1 :(得分:0)

或者你也可以这样做:

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