Заставить CodeIgniter выполнять функциональность хуков? - PullRequest
0 голосов
/ 27 октября 2010

Привет, я столкнулся с проблемой с перехватами в Codeigniter. Я написал перехват для 'post_controller' , который вызывает функцию Controller и загружает шаблон (шаблон представления макета). Он отлично работает во всех обычных случаях , Но теперь мне нужно сделать пользовательскую страницу ошибки. Так что я переопределяю функцию show_404 (). В этой функции я использую get_instance (); функция для получения объекта CI. Используя объект CI, я вызываю функцию для установки параметров макета. Теперь проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь загрузить представление в функцию show_404 () моего пользовательского класса исключений, представление является не загружается, так как хук post_controller не выполняется. Я много чего пробовал, но не получилось. Может кто-нибудь, пожалуйста, предложите мне любой способ сделать это. Или любой другой способ визуализации пользовательских 404 страницы.

function show_404($page = ''){ // error page logic

    header("HTTP/1.1 404 Not Found");
$heading = "404 Page Not Found";
    $message = "The page you requested was not found ";
$CI =& get_instance();
$metadata[AppContants::META_TITLE] = '404 Page Not Found | Door and Window';
$metadata[AppContants::META_KEYWORDS] = '';
$metadata[AppContants::META_DESCRIPTION] = '';
$CI->setMeta($metadata);
$params['LAYOUT_MAINVIEW']='404_page';
$CI->renderView($params);// this is the function in my controller which sets the parameter for my template.Or it would also be very helpful if i can load the view directly as show below.
$CI->load->view('404_page'); // Loading view directly.

}

1 Ответ

0 голосов
/ 27 октября 2010

Взгляните на эту ссылку . По сути, вы, вероятно, захотите создать контроллер для ошибок, а затем создать подкласс CI_Router для маршрутизации всех запросов об ошибках на этот контроллер, где вы можете добавить туда ловушки или загрузить выбранный вами контроллер и косвенно выполнить ловушки.

Редактировать: проблема может заключаться в отправке заголовка ответа (404) - многие браузеры заменяют все, что возвращается сервером, на свои собственные 404 страницы. Попробуйте удалить звонок header() и посмотрите, что получится. $CI->load->view() должно работать как положено. Кроме того, если renderView() не является глобальной функцией, вам может понадобиться ссылка на конкретный контроллер, содержащий метод.

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