2016-12-16 5 views
0

私はsymfony 2プロジェクトでDoctrine\DBAL\Exception\ConnectionExceptionをキャッチしたいと思います。私はDBアクセスのための間違ったパラメータでテストを行います。カスタムExceptionListenerがConnectionExceptionをキャッチしない

これを行うには、カスタムExceptionListenerを作成しました。ここ は私のクラスである:ここでは

namespace Namespace\Event; 

use Doctrine\DBAL\Exception\ConnectionException; 
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface; 
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; 
use Symfony\Component\HttpKernel\Log\LoggerInterface; 

class ExceptionListener 
{ 

    private $logger; 

    private $templateEngine; 

    public function __construct(LoggerInterface $logger, EngineInterface $templateEngine) 
    { 
     $this->logger = $logger; 
     $this->templateEngine = $templateEngine; 
    } 

    /** 
    * @param GetResponseForExceptionEvent $event 
    * @return void 
    */ 
    public function onKernelException(GetResponseForExceptionEvent $event) 
    { 
     $exception = $event->getException(); 

     if ($exception instanceof ConnectionException) { 
      //... 
     } 
} 

は私の問題で、私のExceptionListenerオブジェクトが呼び出されることはありません。ここでは、リスナーが登録されているservices.ymlの設定を示します。

私のファイルの上に私のAppBundle\Resources\config\services.yml

An exception occured in driver: SQLSTATE[HY000] [2002] No route to host 

をしかし、私は、スタックトレースを見てみるならば、私のリスナーが呼び出されます:

at Container->get('app.exception.exception_listener') in classes.php line 1957 
at ContainerAwareEventDispatcher->lazyLoad('kernel.exception') in classes.php line 1925 
at ContainerAwareEventDispatcher->getListeners('kernel.exception') in TraceableEventDispatcher.php line 245 
at TraceableEventDispatcher->preProcess('kernel.exception') in TraceableEventDispatcher.php line 135 
at TraceableEventDispatcher->dispatch('kernel.exception', object(GetResponseForExceptionEvent)) in HttpKernel.php line 221 
at HttpKernel->handleException(object(ConnectionException), object(Request), '1') in HttpKernel.php line 75 
at HttpKernel->handle(object(Request), '1', true) in ContainerAwareHttpKernel.php line 69 
at ContainerAwareHttpKernel->handle(object(Request), '1', true) in bootstrap.php.cache line 1505 
at Kernel->handle(object(Request)) in app_dev.php line 42 

そして、これが出力に含まです

app.exception.exception_listener: 
    class: Namespace\Event\ExceptionListener 
    arguments: [ '@logger', '@templating' ] 
    tags: 
     - { name: kernel.event_listener, event: kernel.exception } 

私はエラーが代わりにスタックしてい php app/console debug:event-dispatcher kernel.exception

Registered Listeners for "kernel.exception" Event 
Order Callable 
Priority 
#1  Namespace\Event\ExceptionListener::onKernelException() 
0 
#2 Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelException() 
#3  Symfony\Component\HttpKernel\EventListener\ExceptionListener::onKernelException() 

-128

+0

私はデバッグしようとします。あなたが提供したデータから間違っている可能性があることは明らかではありません。 – Stepashka

+1

リスナーは正しい順序で登録されていますか?これを実行して、どのカーネル例外リスナーが登録されているかを確認してください: 'php app/console debug:event-dispatcher kernel.exception' – ClickLabs

+0

@Stepashka私は知っています。時々キャッシュの後:クリアされます。 –

答えて

0

あなたのonKernelExceptionメソッドで何が起こっているのかを正確には指定しません。

イベントに応答が設定されていることを確認してください。たとえば、URLにリダイレクトする:

$response = new RedirectResponse('/some_url'); 
$event->setResponse($response); 
return true; 
関連する問題