У меня есть приложение cakephp, которое я пытаюсь выполнить для функции Pages::404
(и соответствующего представления), когда Cake обнаруживает любую ошибку (отсутствующий контроллер, действие и т. Д.).
Каков наилучший способ сделать это?
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 в папку приложения / контроллера. Это просто означает, что вы должны создать как его имя класса.