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. Это просто означает, что вы должны создать как имя класса.