在Symfony2中捕获数据库异常

Ste*_*che 1 php pdo doctrine symfony doctrine-orm

我有一个随机的问题,我无法缩小范围.偶尔,我会在Symfony2应用程序中收到以下错误:

未捕获的异常:驱动程序中发生异常:SQLSTATE [1040]连接太多{"type":1,"file":"/ var/www/symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL /驱动器/ AbstractMySQLDriver.php", "行":115, "电平":30709

我想设置一个应用程序范围的侦听器来捕获PDOException并记录一些信息.我怎样才能挂进Symfony才能捕获PDOException

Tom*_*ski 8

您需要创建自定义异常侦听器.它将侦听所有异常,但您将在其中指定类型检查.

在你services.yml需要指定监听器:

kernel.listener.your_pdo_listener:
        class: Acme\AppBundle\EventListener\YourExceptionListener
        tags:
           - { name: kernel.event_listener, event: kernel.exception, method: onPdoException }
Run Code Online (Sandbox Code Playgroud)

现在您需要创建此类:

YourExceptionListener:

use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
class YourExceptionListener
{
     public function onPdoException(GetResponseForExceptionEvent $event)
     {
          $exception = $event->getException();

          if ($exception instanceof PDOException) {
              //now you can do whatever you want with this exception
          }
     }
}
Run Code Online (Sandbox Code Playgroud)

检查doc 如何创建事件侦听器