在cakephp 2.0中抛出异常总是会导致500内部错误

时间:2012-10-04 11:41:11

标签: cakephp exception-handling http-status-code-404

我的AppController中有以下代码,我用它来拦截404并预先运行一些代码。现在我在调试时将它全部修改为基础。

public function appError($error) {
  throw new NotFoundException();
}

此时异常名称是无关紧要的,我的问题是无论我抛出什么异常都会导致500错误。

我想要做的就是抛出一个404并显示我的404页面,如果我在我的应用程序中输入一个不存在的URL,该工作正常。

我缺少的东西是否导致这500?我无法获得任何有意义的错误消息,因为它只是显示异常错误500.

2 个答案:

答案 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>