2013-07-10 52 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();