【问题标题】:Cannot catch Zend Framework exception无法捕获 Zend Framework 异常
【发布时间】:2013-07-08 02:23:12
【问题描述】:

我有一个基于基本框架的 Zend Framework 应用程序。所以有一个public/index.php 文件,在其中启动了应用程序:

Zend\Mvc\Application::init(require 'config/application.config.php')->run();

我的问题是那里的某个地方抛出了 PDOException,我无法捕捉它。我尝试将 run 语句包装在 try/catch 块中,但没有成功:

try {
    Zend\Mvc\Application::init(require 'config/application.config.php')->run();
} catch (\Exception $e) {
    die("Caught!");
}catch (\PDOException $e) {
    die("Caught!");
}

但这并没有捕获异常,它仍然显示通用的“发生错误”页面。事实上,我也尝试过抛出通用异常,同样它们也无法被捕获。我也尝试过设置set_exception_handler 函数,但还是没有成功。

知道如何解决这个问题吗?

【问题讨论】:

    标签: exception zend-framework2 try-catch


    【解决方案1】:

    好的,我找到了问题所在。 ZF2 有自己的非标准方式来处理异常。在 ZF 中,异常不仅仅是异常,它们是“MvcEvents”,它们不会被粗俗的 try/catch 块捕获,而是需要通过应用程序对象、通过“事件管理器”、通过“附加”方法,通过“EVENT_DISPATCH_ERROR”常量(我猜他们可以称之为“例外”,但这太容易了)。

    所以解决办法是:

    function zendFrameworkErrorHandler(Zend\Mvc\MvcEvent $event) {
        echo "Got exception: " . (string)$event->getParam('exception');
    }
    
    $application = Zend\Mvc\Application::init(require 'config/application.config.php');
    $application->getEventManager()->attach(Zend\Mvc\MvcEvent::EVENT_DISPATCH_ERROR, 'zendFrameworkErrorHandler');
    $application->run();
    

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 1970-01-01
      • 2014-01-23
      • 2023-01-29
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 2021-10-09
      相关资源
      最近更新 更多