我的AppController中有以下代码,我用它来拦截404并预先运行一些代码。现在我在调试时将它全部修改为基础。
public function appError($error) {
throw new NotFoundException();
}
此时异常名称是无关紧要的,我的问题是无论我抛出什么异常都会导致500错误。
我想要做的就是抛出一个404并显示我的404页面,如果我在我的应用程序中输入一个不存在的URL,该工作正常。
我缺少的东西是否导致这500?我无法获得任何有意义的错误消息,因为它只是显示异常错误500.
答案 0 :(得分:2)
在appError()内部抛出一个异常只会导致一个循环而且蛋糕会因500错误而纾困
答案 1 :(得分:2)
好的修复,继承人我做了什么:
由于ADmad亲切地指出我正在创建一个无限循环,我做了以下几点:
/**********************************
/Lib/Error/AppExceptionRenderer.php
***********************************/
App::uses('ExceptionRenderer', 'Error');
class AppExceptionRenderer extends ExceptionRenderer {
public function error400($error) {
/***********************
INSERT MY OWN MAGIC HERE
***********************/
$message = $error->getMessage();
if (Configure::read('debug') == 0 && $error instanceof CakeException) {
$message = __d('cake', 'Not Found');
}
$url = $this->controller->request->here();
$this->controller->response->statusCode($error->getCode());
$this->controller->set(array(
'name' => $message,
'url' => h($url),
'error' => $error,
'_serialize' => array('name', 'url')
));
$this->_outputMessage('error400');
}
}
我还发现我必须将其添加到/Config/core.php
中Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'AppExceptionRenderer',
'log' => true
));
如果要包含组件,请引用ADmad:
“异常渲染器具有对控制器的引用,该控制器是CakeErrorController的一个实例。使用 $ this-&gt; controller-&gt; Components-&gt; load()来加载组件。”< / p>