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




4 Answers

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

/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();

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




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




Принятый ответ не самый лучший вариант, поскольку они перенаправляют 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'; ?>




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

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

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




Related