РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1007 of 1361 menu

Событие ExceptionEvent

Событие ExceptionEvent возникает, когда при обработке HTTP-запроса выбрасывается исключение. Оно позволяет перехватить ошибку и вернуть собственный ответ вместо стандартной страницы ошибки. Первым параметром в конструктор передаётся объект Request, вторым - объект Throwable с пойманным исключением, третьим - объект HttpKernelInterface, в котором произошла ошибка.

Событие доступно через метод getThrowable, который возвращает исключение, и через методы getResponse и setResponse для работы с ответом. По умолчанию событие имеет низкий приоритет, поэтому его обработчики вызываются после основных слушателей ядра.

Синтаксис

use Symfony\Component\HttpKernel\Event\ExceptionEvent;

Методы класса:

$event->getRequest(); // Request $event->getThrowable(); // Throwable $event->getResponse(); // ?Response $event->setResponse($response); $event->hasResponse(); // bool $event->isMainRequest(); // bool

Пример

Давайте создадим слушатель, который перехватывает исключение и возвращает собственный ответ:

<?php namespace App\EventListener; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\ExceptionEvent; class ExceptionListener { public function onKernelException(ExceptionEvent $event): void { $exception = $event->getThrowable(); $response = new Response('error: ' . $exception->getMessage()); $response->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR); $event->setResponse($response); } } ?>

Теперь зарегистрируем слушатель в конфигурации сервисов:

services: App\EventListener\ExceptionListener: tags: - { name: kernel.event_listener, event: kernel.exception }

Результат выполнения кода при исключении с текстом 'page not found':

error: page not found

Пример

Давайте проверим, что исключение относится к главному запросу, прежде чем формировать ответ:

<?php namespace App\EventListener; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\ExceptionEvent; class ExceptionListener { public function onKernelException(ExceptionEvent $event): void { if (!$event->isMainRequest()) { return; } $request = $event->getRequest(); $path = $request->getPathInfo(); $response = new Response('error on ' . $path); $event->setResponse($response); } } ?>

Результат выполнения кода для адреса /user:

error on /user

Смотрите также

  • событие RequestEvent,
    которое возникает при поступлении запроса
  • событие ResponseEvent,
    которое возникает при формировании ответа
  • метод getRequest,
    который возвращает объект запроса
  • метод setResponse,
    который устанавливает ответ для события
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить