У меня есть эта функция, которая находится на крючке:
public function checkIfLogged() { $this->CI = & get_instance(); if(!$this->CI->session->userdata('logged') ){ $this->CI->load->view('common/home'); exit; } }
Моя проблема заключается в том, что представление $this->CI->load->view('common/home');
фактически не загружает файл шаблона. Есть ли какие-нибудь резоны?
Я использую hook_ post_controller_constructor.
Спасибо, Питер
pre_system
Вызывается очень рано во время выполнения системы. На данный момент загружен только класс тестов и крючков. Произошло никаких маршрутов или других процессов.
pre_controller
Вызывается непосредственно перед вызовом любого из ваших контроллеров. Все базовые классы, маршрутизация и проверки безопасности были выполнены.
post_controller_constructor
Вызывается сразу после создания вашего контроллера, но до любого вызова метода.
post_controller
Вызывается сразу после полного выполнения вашего контроллера.
display_override
Переопределяет функцию _display (), которая используется для отправки завершенной страницы в веб-браузер в конце выполнения системы. Это позволяет использовать собственную методологию отображения. Обратите внимание, что вам нужно будет ссылаться на суперобъект CI с помощью $ this-> CI = & get_instance (), после чего окончательные данные будут доступны, вызывая $ this-> CI-> output-> get_output ()
cache_override
Позволяет вам вызвать вашу собственную функцию вместо функции _display_cache () в классе вывода. Это позволяет использовать собственный механизм отображения кеша.
post_system
Вызывается после того, как окончательная отображаемая страница будет отправлена в браузер, в конце выполнения системы после отправки окончательных данных в браузер.
так
Я думаю, что тот, который вы ищете, – display_override
но вы также можете посмотреть здесь. Нужно ли CodeIgniter загружать представление на последнем этапе?
Фактическая проблема заключалась в использовании вами exit
. Когда вы загружаете представление, его вывод добавляется к классу Output ( system/core/Output.php
). Затем окончательные данные просмотра отправляются (эхом) в браузер по строке $OUT->_display();
найдено в system/core/CodeIgniter.php
.
Поскольку вы бросили exit
туда, сценарий останавливается, и этот метод отображения никогда не вызывается.
Я действительно не знаю, что вы пытаетесь сделать с этим крючком (это похоже на отображение указанной страницы, если пользователь вышел из системы или что-то в этом роде), но самым быстрым решением было бы вернуть результат просмотра и повторить его прямо с крючка.
public function checkIfLogged() { $this->CI = & get_instance(); if(!$this->CI->session->userdata('logged') ){ exit($this->CI->load->view('common/home', null, true)); } }
Я бы отказался от использования display_override
, потому что весь ваш код контроллера будет работать до того, как у крючка даже будет возможность проверить данные сеанса (и, возможно, ваш контроллер может даже перезаписать данные сеанса, давая неожиданные результаты).
Вы даже можете использовать базовый контроллер (MY_Controller) вместо крючка. Он может быть более подходящим в зависимости от вашей ситуации / желаемой функциональности.