私は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
私はデバッグしようとします。あなたが提供したデータから間違っている可能性があることは明らかではありません。 – Stepashka
リスナーは正しい順序で登録されていますか?これを実行して、どのカーネル例外リスナーが登録されているかを確認してください: 'php app/console debug:event-dispatcher kernel.exception' – ClickLabs
@Stepashka私は知っています。時々キャッシュの後:クリアされます。 –