CodeIgniter: помощники загрузки (pre_controller)
Я пытаюсь загрузить хелпер cookie в моем кэше pre_controller для функции "запомнить меня" на нашем сайте. Я думал, что создание экземпляра объекта CI с помощью $ci = & get_instance(); позволит мне получить доступ к помощникам загрузки, но это не так.
Мысли?
$ci =& get_instance();
$ci->load->helper('cookie');
// does not load
Ответы
Ответ 1
Захват pre_controller
выполняется до того, как супер объект был полностью сконструирован, поэтому get_instance()
не может работать - статический объект, который возвращает ссылку, еще не был инициализирован.
Вместо этого используйте вместо этого post_controller_constructor
hook; ваш конструктор контроллера будет выполнен, и супер объект CI будет доступен для использования.
Ответ 2
Проблема с post_controller_constructor выполняется после конструктора (достаточно забавно), и если вы используете конструкторы Controller для многих вещей, это может быть проблемой.
Если это не проблема для вас (ваш помощник не влияет на что-либо, запущенное или загруженное в ваших конструкторах) достаточно справедливо, если это проблема, у вас есть два решения.
- Вместо того, чтобы закрепить свой код в MY_Controller
-
Создайте 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
.