CodeIgniter: хуки (pre_controller) помощники загрузки - PullRequest
10 голосов
/ 04 февраля 2010

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

Мысли

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

Ответы [ 2 ]

15 голосов
/ 04 февраля 2010

Проблема с 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.

12 голосов
/ 04 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...