Вывести все ошибки на пользовательскую страницу ошибок в CakePHP

Я пытаюсь вывести все свои ошибки на одну пользовательскую страницу в Cakephp(2.0), но большинство руководств, которые я нахожу, посвящены очень конкретным кодам ошибок. Я хочу, чтобы он показывал только одну страницу с ошибкой, поэтому сначала я указал все ошибки с определенным статусом ошибки на одну страницу с ошибкой. Но после дальнейшего тестирования я заметил, что другие коды не перехватываются.

Мне нужен мой код для захвата всех кодов ошибок http на одной странице ошибок.

Это мой код:

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

И мой AppExceptionRenderer:

<?php 
 App::uses('ExceptionRenderer', 'Error');

class AppExceptionRenderer extends ExceptionRenderer {

public function internalError($error) {
$this->controller->beforeFilter();
$this->controller->set('title_for_layout', 'Internal Server Error');
$this->controller->render('/Errors/error500');
$this->controller->response->send();

... All the other error handlers are similar to this, but very limited since there are a lot of client and server errors 
} ?>

Мои шаблонные страницы работают нормально, поэтому я их не включал.

Как изменить код, чтобы он охватывал каждый код состояния http? Или это невозможно?


person marchemike    schedule 21.09.2015    source источник
comment
Когда вы закончите разработку и перейдете к развертыванию вашего приложения CakePHP, вы должны изменить debug уровень в период с core.php по 0. После этого изменения по умолчанию есть только два состояния ошибки, 404 или 500. Так о каких еще кодах состояния ошибки вы говорите?   -  person Oops D'oh    schedule 24.09.2015


Ответы (1)


Вы должны переопределить следующие методы:

ExceptionRenderer::error400($error) 
ExceptionRenderer::error500($error) 

Кроме того, вы можете переопределить ExceptionRenderer:_outputMessage($template) примерно так:

protected function _outputMessage($template) {
    $this->controller->layout = 'my_error';
    parent::_outputMessage($template);
}

И добавьте файл /app/View/Layouts/my_error.ctp в качестве нового пользовательского макета.

person Inigo Flores    schedule 27.11.2015