web-dev-qa-db-ja.com

Zend Framework2が推奨するエラー処理方法

Zendが提供するSkeletonアプリケーションが_error 500_を処理しないことに気づきました。 ZF1には、それを処理するErrorControllerがあったことを私は知っています。私はオンラインでいくつかの調査を行いましたが、これに対する明確な解決策は見つかりませんでした。

では、ZF2でエラーを処理するための最良の方法は何ですか。モジュールごとですか、それともグローバルな例外/エラーハンドラーですか?

別の解決策がini_set('display_errors', true);を_index.php_に追加することであることは知っていますが、その解決策はあまり好きではありません。フレームワークはエラーを処理するための何らかの方法を提供する必要があるようです。

15
Teodor Talov

例外をグローバルにキャッチしている次の例のように、キャッチした後は、とにかく例外を処理できます...:

Module.phponBootstrapメソッドでは、イベントが発生したときに実行する関数をアタッチできます。エラー(例外)が発生したときに実行される関数をアタッチします。

public function onBootstrap(MvcEvent $e)
{
    $application = $e->getApplication();
    $em = $application->getEventManager();
    //handle the dispatch error (exception) 
    $em->attach(\Zend\Mvc\MvcEvent::EVENT_DISPATCH_ERROR, array($this, 'handleError'));
    //handle the view render error (exception) 
    $em->attach(\Zend\Mvc\MvcEvent::EVENT_RENDER_ERROR, array($this, 'handleError'));
}

次に、任意の方法でエラーを処理する関数を定義します。次に、例を示します。

public function handleError(MvcEvent $e)
{
    //get the exception
    $exception = $e->getParam('exception');
    //...handle the exception... maybe log it and redirect to another page, 
    //or send an email that an exception occurred...
}
31