CodeIgniter kütüphane birden çok örneği

1 Cevap php

I have got a problem with my codeigniter library. To transform database data into a navigation and have active elements and such like I build a library class CI_Navigation(). It works perfectly fine, I just have one problem.

Often on webpages one has corresponding but separated navigations e.g. a main navigation at the top and a subnavigation on the side. To get around that I can initialize my class with a parameter telling it which levels this navigation is to hold. I would for example do something like this.

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

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

Tahmin edebileceğiniz gibi sınıfında veriler yapı ilk çağrı tarafından atandı yolu kalır, çünkü çalışmıyor.

Ne yazık ki yeterince CodeIgniter Kütüphanelerinde singletons (sağ? Ben okudum ne) vardır. Yani gibi iki kez başlatılamıyor:

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

Eğer ben bu sorunun üstesinden nasıl bir fikrin var mı.

It should work if I would use arrays for the variables used in the class right? E.g. for the options instead of using $this->option I would have to dynamically create $this->$option[0], $this->$option[1].

Bu çalışır mı? Ben şu anda test edemez ama bunu bu gece yapacağız. Ama bu gerçekten çok zarif yolu değildir, bu nedenle bu çözmek için daha iyi bir yolu var mı? I kitaplık birden çok kez başlatılamadı herhangi bir yolu var mı?

Peşin adamlar teşekkür ederiz.

1 Cevap

Eğer sıkı CI kütüphane uygulanmasını sopa istiyorsanız, o zaman ben size sınıf konfigürasyonları bir dizi parametreleri yapmak öneririz; ve sonra da 'inşa' fonksiyonu kullanmak istediğiniz yapılandırmayı belirtin.

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

Ama sık sık bu tür bir şey için standart nesnelere dönmek:

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