首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义ExceptionListener不能捕获ConnectionException

自定义ExceptionListener不能捕获ConnectionException
EN

Stack Overflow用户
提问于 2016-12-17 05:26:41
回答 0查看 346关注 0票数 0

我想在Symfony 2项目中捕获Doctrine\DBAL\Exception\ConnectionException。我用错误的DB访问参数做了一个测试。

为此,我创建了一个自定义ExceptionListener。下面是我的类:

代码语言:javascript
复制
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在我的文件顶部。

代码语言:javascript
复制
app.exception.exception_listener:
    class: Namespace\Event\ExceptionListener
    arguments: [ '@logger', '@templating' ]
    tags:
      - { name: kernel.event_listener, event: kernel.exception }

相反,我有一个错误堆栈:

代码语言:javascript
复制
An exception occured in driver: SQLSTATE[HY000] [2002] No route to host

但是,如果我查看堆栈跟踪,我的侦听器将被调用:

代码语言:javascript
复制
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

这是php app/console debug:event-dispatcher kernel.exception的输出

代码语言:javascript
复制
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

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41192643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档