CakePHP: Как я буду маршрутизировать все отсутствующие вызовы контроллера / действия на одну общую страницу ошибок?

У меня есть приложение cakephp, которое я пытаюсь выполнить для функции Pages::404 (и соответствующего представления), когда Cake обнаруживает любую ошибку (отсутствующий контроллер, действие и т. Д.).

Каков наилучший способ сделать это?

Related of "CakePHP: Как я буду маршрутизировать все отсутствующие вызовы контроллера / действия на одну общую страницу ошибок?"

Cake автоматически выдает ошибку 404 для отсутствующих методов или контроллеров. В режиме отладки эта ошибка принимает форму подробного сообщения об ошибке, содержащего инструкции, например:

Отсутствующий контроллер

Ошибка: FooController не найден.

Ошибка: создайте класс FooController ниже в файле:> app / controllers / foo_controller.php

Примечание. Если вы хотите настроить это сообщение об ошибке, создайте приложение / views / errors / missing_controller.ctp.

В режиме производства ( debug = 0 ) сообщение выглядит следующим образом:

не обнаружена

Ошибка: запрошенный адрес '/ foo' не найден на этом сервере.

Эти страницы ошибок определены в cake/libs/view/errors/ . Как говорится в сообщении в режиме отладки, вы можете создавать свои собственные страницы пользовательских ошибок (с тем же именем, что и те, что cake/ каталоге cake/ ) в app/views/errors/ .

Если вы хотите выполнить пользовательскую функцию при ошибках, лучше всего поместить ее в контроллер AppError как описано в разделе «Обработка ошибок» .

Шаг 1: В app_controller.php добавьте две функции

 function _setErrorLayout() { if ($this->name == 'CakeError') { $this->layout = 'error'; } } function beforeRender () { $this->_setErrorLayout(); } } 

Шаг 2. В views\layouts\ create error.ctp содержащих echo $ content_for_layout;

step: 3 В views\errors\ make missing_action.ctp и настройте страницу так, как вам нужен мой PHP-код:

  echo $html->image('404-not-found-1-3.jpg'); 

Вы находитесь в контроллере, когда пытаетесь перенаправить на страницу ошибок 404?

Ну, если это так, вы можете обойти эту проблему следующим образом:

Скопируйте и вставьте макет ошибки (error404.ctp) из каталога базовой библиотеки торта в ваше приложение / представления / ошибки /

Затем добавляйте следующую строку, когда вы сталкиваетесь с ошибкой внутри контроллера.

 $this->cakeError('error404',array(array('url'=>'/'))); 

О, еще один способ справиться с этим – отредактировать файл route.php в приложении / config

Официальный сайт CakePHP Маршруты-Конфигурация

На данный момент у меня нет рабочей копии CakePHP, поэтому я просто опишу основную логику здесь (что вы можете сделать в файле routes.php)

Перенаправить трафик с помощью определенных шаблонов URL (например, http: // yourwebsite / validController / validFunction / validParam ) соответственно в соответствующие адреса. Перенаправить все остальные трафик (отсутствующий контроллер, модель, просмотр и т. Д.) На страницу 404.

Надеюсь, это поможет:)

Добавьте класс PostController.php не post_controller.php в папку приложения / контроллера. Это просто означает, что вы должны создать как его имя класса.