Захват исключений базы данных в Symfony2

У меня есть случайная проблема, которую я не могу сузить. Иногда я получаю следующую ошибку в приложении Symfony2:

Uncaught Exception: Исключено в драйвере: SQLSTATE [08004] [1040] Слишком много соединений {"type": 1, "file": "/ var / www / symfony / vendor / doctrine / dbal / lib / Doctrine / DBAL / Водитель / AbstractMySQLDriver.php», "линия": 115, "уровень": 30709

Я хотел бы настроить прослушиватель приложений, чтобы поймать PDOException и PDOException некоторую информацию. Как я могу подключиться к Symfony, чтобы поймать PDOException ?

Вам нужно создать пользовательский прослушиватель исключений. Он будет прослушивать все исключения, но вы укажете в нем проверку типа.

В your services.yml вам нужно указать слушателя:

 kernel.listener.your_pdo_listener: class: Acme\AppBundle\EventListener\YourExceptionListener tags: - { name: kernel.event_listener, event: kernel.exception, method: onPdoException } 

Теперь вам нужно создать этот класс:

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 } } } 

Проверка документа, как создать прослушиватель событий

Определите такой сервис:

 <service id="app.listener.kernel.exception" class="MyAppBundle\Listener\KernelExceptionListener"> <tag name="kernel.event_listener" event="kernel.exception" method="onKernelException"/> <argument type="service" id="logger"/> </service> 

И класс вроде этого:

 use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; class KernelExceptionListener { private $logger; public function __construct(Monolog\Logger $logger) { $this->logger = $logger; } public function onKernelException(GetResponseForExceptionEvent $event) { // Here check the exception //$event->getException() } }