CodeIgniter: Рычаги (pre_controller) загружающиеся помощники

Я пытаюсь загрузиться, помощник cookie в моем рычаге pre_controller для 'помнят меня' функция на нашем сайте. Я думал, что создание экземпляра CI возражает с $ci = и get_instance (); позволил бы мне доступу к загружающимся помощникам, но дело обстоит не так.

Мысли?

 $ci =& get_instance();
 $ci->load->helper('cookie');
 // does not load
10
задан Thomas 4 February 2010 в 00:28
поделиться

2 ответа

Хук pre_controller выполняется до того, как суперобъект будет полностью построен, поэтому get_instance () не может работать - статический объект, на который он возвращает ссылку, еще не был инициализирован.

Вместо этого рассмотрите возможность использования ловушки post_controller_constructor ; конструктор вашего контроллера будет выполнен, и суперобъект CI будет доступен для использования.

12
ответ дан 3 December 2019 в 15:51
поделиться

Проблема с post_controller_constructor в том, что он запускается после конструктора (как ни странно), и если вы используете конструкторы Controller для многих вещей, это может быть проблемой.

Если это не проблема для вас (ваш помощник не повлияет на что-либо, запущенное или загруженное в ваших конструкторах), честно говоря, если это проблема, у вас есть два решения.

  1. Вместо перехвата поместите свой код в MY_Controller
  2. Создайте MY_Controller и добавьте настраиваемую точку перехвата.

     class MY_Controller расширяет Controller 
     {
     
    function MY_Controller () 
     {
    parent :: Controller (); 
     $ GLOBALS ['EXT'] -> _ call_hook ('pre_controller_constructor'); 
     
    } 
     

Обратите внимание, что если вы используете CodeIgniter 3.0 или новее, функция _call_hook был переименован в call_hook .

15
ответ дан 3 December 2019 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: