2013-07-10 55 views
1

我有一个基于基本框架的Zend Framework应用程序。所以这是一个public/index.php文件,并在那里,启动应用程序:无法捕捉Zend Framework异常

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

好的,我发现问题是什么。 ZF2有其自己的非标准方式来处理例外情况。在ZF中,异常不仅仅是例外,它们是“MvcEvents”,它们不会被粗俗的try/catch块捕获,而是需要通过应用程序对象通过“事件管理器”,“附加” “attach”方法,通过一个“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();