我有一个基于基本骨架的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
功能,但仍然没有运气。
知道如何解决这个问题吗?
答案 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();