Cakephp: Как бы я перенаправил все отсутствующие вызовы контроллера / действия на одну страницу с общей ошибкой? - PullRequest
8 голосов
/ 17 ноября 2009

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

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

Ответы [ 4 ]

25 голосов
/ 17 ноября 2009

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

Отсутствует контроллер

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

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

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

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

Не найдено

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

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

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

10 голосов
/ 08 апреля 2011

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

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

function beforeRender () {  
      $this->_setErrorLayout();
    }
}

Step2: в views\layouts\ создать error.ctp содержащий эхо $ content_for_layout;

шаг: 3 В views\errors\ сделать missing_action.ctp и настроить страницу, как вам нужно мой код PHP был:

 echo $html->image('404-not-found-1-3.jpg');
0 голосов
/ 30 марта 2015

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

0 голосов
/ 17 ноября 2009

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

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

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

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

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

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

CakePHP Официальный сайт Routes-Configuration

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

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

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

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