У меня есть случайная проблема, которую я не могу сузить. Иногда я получаю следующую ошибку в приложении 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() } }