Использовать класс Loader в пределах крюка в CodeIgniter

У меня есть эта функция, которая находится на крючке:

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.

Спасибо, Питер

Related of "Использовать класс Loader в пределах крюка в CodeIgniter"

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) вместо крючка. Он может быть более подходящим в зависимости от вашей ситуации / желаемой функциональности.