在 CakePHP 2 中引发自定义 503 异常

Posted

技术标签:

【中文标题】在 CakePHP 2 中引发自定义 503 异常【英文标题】:Throwing a custom 503 exception in CakePHP 2 【发布时间】:2012-11-15 10:48:59 【问题描述】:

我需要提供一个 503 Service Unavailable HTTP 标头。

通常我将这些用于 404 和 500 代码

throw new NotFoundException();
throw new InternalErrorException();

但是我在 Cakephp 2.2 中找不到 503 的相关异常?

在我的“app/lib/AppExceptionHandler.php”文件中,我有这个处理错误的类/函数。

class AppExceptionHandler 
    public static function handle($error) 
     

编辑:

在“app/Lib”文件夹中,我创建了一个名为“MyExceptions.php”的文件。我在这个文件中写了以下代码:

class ServiceUnavailableException extends CakeException 

protected $_messageTemplate = 'Service is not available now';


在“bootstrap.php”中我写了这个:

App::uses('MyExceptions', 'Lib');

然后在“MyNewController.php”文件中我写了这个:

抛出新的ServiceUnavailableException("只是尝试");

但是当我抛出这个异常时,我得到了这个错误:

Fatal error: Class 'ServiceUnavailableException' not found in
 /var/www/vhosts/example.com/httpdocs/app/Controller/MyNewController.php
 on line 3560

Warning (2): Cannot modify header information - headers already sent by
(output started at 
/var/www/vhosts/example.com/httpdocs/app/Controller/MyNewController.php:3560)
[APP/Lib/AppExceptionHandler.php, line 19]

我错过了什么? 谢谢

【问题讨论】:

这是相关的:***.com/questions/7690165/cakephp-2-new-exceptions 【参考方案1】:

The Exceptions page in the Cake 2.0 book 值得一读。

这是我的简短测试:

// in bootstrap.php
require(APP . 'Lib' . DS . 'MyExceptions.php');


// in /Lib/MyExceptions.php
class ServiceUnavailableException extends CakeException 

    protected $_messageTemplate = 'Test';


// in controller
throw new ServiceUnavailableException('Service unavailable', 503);

【讨论】:

除非您需要自定义所有 cake 的异常处理,否则您可能不需要 /Lib/AppExceptionHandler.php。另外,建议的 App::uses() 对我不起作用,您可以尝试 require()。 不用担心,很高兴我能帮上忙。【参考方案2】:

http://api22.cakephp.org/class/cake-response#method-CakeResponsestatusCode

将允许您设置状态代码。

【讨论】:

我正在尝试为 503 引发自定义异常,因为我会为其他情况引发默认异常。已编辑的问题。

以上是关于在 CakePHP 2 中引发自定义 503 异常的主要内容,如果未能解决你的问题,请参考以下文章

JAVA自定义异常

获取“调用的目标已引发异常。”在自定义控件中

处理 Kotlin Coroutines 中自定义 okhttp 拦截器引发的异常

当属性无效时,我可以在自定义 JSP 标记中使用 JSTL 引发异常吗?

从完成处理程序/块中引发自定义异常会使目标 c 中的应用程序崩溃

python自定义异常,使用raise引发异常