0

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

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

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

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

有什么我遗漏的东西导致了这个 500 吗?我无法收到任何有意义的错误消息,因为它只是显示异常错误 500。

4

2 回答 2

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->controller->Components->load()来加载您的组件。”

于 2012-10-04T13:46:48.910 回答
2

在 appError() 本身中抛出异常只会导致循环,并且 cake 会以 500 错误退出

于 2012-10-04T11:45:22.803 回答