无法捕获Zend Framework异常

时间:2013-07-10 08:30:38

标签: exception zend-framework2 try-catch

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

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

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

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

但是这没有捕获异常,它仍然显示通用的“发生错误”页面。事实上,我也试过抛出一般的异常,同样也无法捕获它们。我也试过设置set_exception_handler功能,但仍然没有运气。

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

1 个答案:

答案 0 :(得分:0)

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

所以解决方案是:

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();