Cakephp: как бы я перенаправил все отсутствующие вызовы контроллера/действия на одну страницу с общей ошибкой?
У меня есть приложение cakephp, которое я пытаюсь получить, чтобы обслуживать Pages::404
функция (и соответствующий вид) всякий раз, когда торт сталкивается с какой-либо ошибкой (отсутствует контроллер, действие и т. д.).
Как лучше всего это сделать?
4 ответов
Cake автоматически выдает ошибку 404 для отсутствующих методов или контроллеров. В режиме отладки эта ошибка принимает форму подробного сообщения об ошибке, содержащего инструкции, например:
Отсутствует Регулятор
ошибка: не удалось найти FooController.
ошибка: создайте класс FooController ниже в файле: > app/Controller / foo_controller.в PHP
обратите внимание: если вы хотите настроить это сообщение об ошибке, создайте app / views / ошибки / missing_controller.ctp
в режиме производства (debug = 0
) сообщения выглядит так:
Не Нашел
ошибка: запрошенный адрес '/foo ' не найден на этом сервере.
эти страницы ошибок определены в cake/libs/view/errors/
. Как говорится в сообщении в режиме отладки, вы можете создавать свои собственные страницы ошибок (используя то же имя, что и в ) в app/views/errors/
.
если вы хотите выполнить пользовательскую функцию при ошибках, вам лучше всего поместить ее в AppError
контроллер, как описано в Обработка Ошибок.
Шаг 1:в app_controller.php добавить две функции
function _setErrorLayout() {
if ($this->name == 'CakeError') {
$this->layout = 'error';
}
}
function beforeRender () {
$this->_setErrorLayout();
}
}
Шаг 2: В views\layouts\
создать error.ctp
содержащий echo $content_for_layout;
Шаг:3 в views\errors\
make missing_action.ctp
и настроить страницу как вам нужно
мой PHP код:
echo $html->image('404-not-found-1-3.jpg');
вы находитесь в контроллере, когда пытаетесь перенаправить на страницу ошибки 404?
Ну, если это так, вы можете обойти проблему следующим образом:
скопируйте и вставьте макет ошибки (error404.ОСАГО) от торта каталог основной библиотеки в ваше приложение / просмотры / ошибки/
затем добавьте следующую строку всякий раз, когда вы сталкиваетесь с ошибкой внутри контроллера.
$this->cakeError('error404',array(array('url'=>'/')));
о, другой способ справиться с этим-редактировать маршруты.php-файл в app / config
CakePHP официальный сайт маршруты-конфигурация
на данный момент у меня нет рабочей копии CakePHP, поэтому я бы просто описал основную логику здесь(что вы можете сделать внутри маршрутов.файл php)
перенаправить трафик с определенными шаблонами url(скажем,http://yourwebsite/validController/validFunction/validParam) в их соответствующих направлениях соответственно. Перенаправить весь остальной трафик (отсутствует контроллер, модель, вид и т. д.) до 404 страницы.
надеюсь, что это поможет:)
пожалуйста, добавьте класс PostController.php не post_controller.php в папке app / controller. Это просто означает, что вы должны создать как имя класса.