CodeIgniter: помощники загрузки (pre_controller)

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

Мысли?

$ci =& get_instance(); $ci->load->helper('cookie'); // does not load 

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

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

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

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

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

     class MY_Controller extends Controller { function MY_Controller() { parent::Controller(); $GLOBALS['EXT']->_call_hook('pre_controller_constructor'); } } 

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