【问题标题】:throwing an exception in cakephp 2.0 always causes a 500 internal error在 cakephp 2.0 中抛出异常总是会导致 500 内部错误
【发布时间】:2012-10-04 21:49:52
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案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() 来加载你的组件。”

      【讨论】:

      • 非常感谢 ADmad、renan_saddam 和 jose_zap 对 #cakephp IRC 的所有帮助。
      • 既然他的回答是正确的并且对你有帮助,最好将其标记为正确或至少 +1 为有用。
      猜你喜欢
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2017-11-06
      • 2023-02-10
      • 2020-11-16
      相关资源
      最近更新 更多