CakePHP 2.0 – Как создать пользовательские страницы ошибок?

Я прочитал, что класс AppError теперь имеет обратную совместимость и что вместо этого следует использовать Исключения. Как можно создавать собственные страницы ошибок для таких вещей, как ошибки 404 или полностью пользовательские ошибки?

Попробуй это:

/app/config/core.php

AppExceptionRender рендеринг необходимо установить как AppExceptionRender . Пример:

 Configure::write('Exception', array( 'handler' => 'ErrorHandler::handleException', 'renderer' => 'AppExceptionRenderer', 'log' => true )); 

/app/Controller/ErrorsController.php

 class ErrorsController extends AppController { public $name = 'Errors'; public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('error404'); } public function error404() { //$this->layout = 'default'; } } 

/app/Lib/Error/AppExceptionRenderer.php

 App::uses('ExceptionRenderer', 'Error'); class AppExceptionRenderer extends ExceptionRenderer { public function notFound($error) { $this->controller->redirect(array('controller' => 'errors', 'action' => 'error404')); } } 

/app/View/Errors/error404.ctp

 <div class="inner404"> <h2>404 Error - Page Not Found</h2> </div> 

Вставьте его туда, где вам нужно: throw new NotFoundException();

Чтобы настроить содержимое страницы с ошибкой 404 и не нужно настраивать логику, просто отредактируйте содержимое app/View/Errors/error400.ctp .

Кажется, что это нигде не документировано.

Если вы $this->layout = 'your_error_layout'; использовать другой макет вместо стандартного , просто добавьте $this->layout = 'your_error_layout'; внутри вашей ошибки400.ctp (или любую другую страницу ошибок, которую вы создаете в разделе «Просмотр / ошибки»).

Создайте макет с именем 404 или что-нибудь еще и используйте в контроллере приложения

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

Принятый ответ не самый лучший вариант, поскольку они перенаправляют URL-адрес вашего браузера на http://example.com.br/error/error404 и пользователь не может следить за той страницей, которую он ввел для создания этой ошибки.

Лучший способ справиться с этой ситуацией – редактировать файл на View/Errors/error400.ctp , поэтому, когда вы вводите не найденный URL-адрес, например http:example.com/crazy-wrong-url , браузер сохранит этот URL-адрес, но отобразит его содержимое файла error400.ctp который вы редактируете.

Если вы хотите изменить макет, который будет отображаться в представлении, вы можете ввести его в свой вид <?php $this->layout = 'error'; ?> <?php $this->layout = 'error'; ?>

Вы можете создать CustomErrorPages или Exeptions , просто создав class вашей ошибки, который вы собираетесь показать. Этот класс должен расширить CakeExeption . Затем создайте свой exeptionlogic и ваш набор. Теперь вы можете просто throw new <YourExeptionClass>() и он отобразит ошибку.

Документация: CakeExceptions

Сегодня обнаружил, что можно получить код excpetion в файле ctp, используя $error->getCode() (по крайней мере, в CakePHP 2.x).

$error – это то, что Cake помещает объект исключения …

Теперь вы можете изменить содержимое своего представления с условным блоком if/else , основанным на этом значении.