强制所有错误到CakePHP中的自定义错误页面

时间:2015-09-21 09:22:21

标签: php cakephp http-status-codes cakephp-2.x

我试图将所有错误强制到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状态代码?或者是不可能的?

1 个答案:

答案 0 :(得分: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添加为新的自定义布局。