1

我有一个基于基本骨架的 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功能,但仍然没有运气。

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

4

1 回答 1

0

好的,我发现了问题所在。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();
于 2013-07-10T09:16:13.060 回答