繁体   English   中英

在Zend Framework 1中无需使用try catch即可处理异常

[英]Handle exception without using try catch in Zend Framework 1

我有一个在Zend Framework 1中开发的项目。该项目已完成。

现在,当我测试整个网站时,某些页面引发了异常。 其中之一如下:

消息“没有类型为NULL的适配器”的异常'Zend_Paginator_Exception'

我已经在网上搜索并获得了向其中添加try-catch的步骤。 但是,检查所有代码并重复此步骤将花费大量时间。

我可以编写一个捕获所有异常并对其进行处理的通用异常处理程序吗?

Zend框架使用errorController自动处理异常。 您可以通过在配置文件中添加以下行来启用它。

resources.frontController.throwExceptions = 0

如果要手动处理异常,则可以在下面的代码中将其集中起来,而不是在整个代码中编写try / catch块。

告诉Zend Framework不处理异常。 在您的application.ini中执行此操作

resources.frontController.throwExceptions = 1

在Bootstrap类中定义一个自定义方法来处理异常。

public function __handleExceptions(Exception $e){
        //render a view with a simple error message for the user
        //and send an email with the error to admin
    }

覆盖Bootstrap类中的Zend_Application_Bootstrap_Bootstrap的_bootstrap()run()方法,如下所示。 这将捕获在引导和请求分配过程中引发的所有异常,并调用您的自定义异常处理程序。

protected function _bootstrap($resource = null)
    {
        try {
            parent::_bootstrap($resource);
        } catch(Exception $e) {
            $this->__handleExecptions($e);
        }
    }

    public function run()
    {
        try {
            parent::run();
        } catch(Exception $e) {
            $this->__handleExecptions($e);
        }
    }

这将消除在多个位置编写try / catch块的需要。 希望这可以帮助。

如果您在index.php中有这一行

$application->bootstrap()->run();

你可以用try catch块包装它

try {
    $application->bootstrap()->run();
} catch (Exception $e) {
    //handle all exceptions here
}

当然,对于不同类型的异常,您也可以具有许多catch块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM