Php Symfony3:集中式异常处理

Php Symfony3:集中式异常处理,php,exception-handling,symfony,Php,Exception Handling,Symfony,我正在处理异常,并尝试创建一个异常侦听器,其中与数据库相关的异常将被记录并通过电子邮件发送 但问题是,当我捕获抛出的异常以向用户显示消息时,侦听器没有被调用: try { try { $em = $this->getDoctrine()->getManager(); $user = $em->getRepository('AppBundle:User') ->getUserByEmail('abc

我正在处理异常,并尝试创建一个异常侦听器,其中与数据库相关的异常将被记录并通过电子邮件发送

但问题是,当我捕获抛出的异常以向用户显示消息时,侦听器没有被调用:

try {
    try {
        $em = $this->getDoctrine()->getManager();

        $user = $em->getRepository('AppBundle:User')
                 ->getUserByEmail('abc@example.com');

    }
    catch(\Doctrine\DBAL\DBALException $e) {
        throw new \Doctrine\DBAL\DBALException('DBAL error!!');
    }
}
catch(\Exception $e) {
    echo $e->getMessage();
}
未呈现错误时调用相同的侦听器:

try {
    $em = $this->getDoctrine()->getManager();

    $user = $em->getRepository('AppBundle:User')
             ->getUserByEmail('abc@example.com');    
}
catch(\Doctrine\DBAL\DBALException $e) {
    throw new \Doctrine\DBAL\DBALException('DBAL error!!');
}
异常侦听器:

class ExceptionListener {

       public function onKernelException(GetResponseForExceptionEvent $event) {
          $exception = $event->getException();

          if ($exception instance of \Doctrine\DBAL\DBALException) {
             //log the error
          }

          ...
          ...
       }
}

我想做的是在一个地方正确地管理错误。谢谢。

我实际上忽略了内核事件。当抛出异常时,HttpKernel类将捕获该异常并发送
kernel.exception
事件只有当异常未捕获时才会发生该事件

当出现未捕获的异常时,将发生异常事件

此事件允许您为引发的异常或异常创建响应 修改抛出的异常。事件侦听器方法接收 Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent 例如


顺便说一句,您已经看到了吗?是的,可能会实施。非常感谢。