symfony4 Листенер события Response. Как изменить Response
Primary tabs
Чтобы внести изменения в Response уже после отработки контроллера (например, добавить / изменить HTTP заголовки, добавить cookie и т.д.), можно навесить listener на событие FilterResponseEvent.
Это событие запускается после того, как контроллер возвращает объект Response.
Если Вы хотите отловить какой-то другой момент, в Symfony существует много стандартных встроенных событий. Можно посмотреть здесь.
Пример
<?php namespace App\EventListener; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; class ResponseListener { /** * @param FilterResponseEvent $event * * @return void */ public function onKernelResponse(FilterResponseEvent $event): void { $request = $event->getRequest(); $response = $event->getResponse(); // Устанавливаем куку реферального кода, если в пути передан параметр 'ref' preg_match( '%^.+ref=(.+)?&*$%', $request->getUri(), $matches ); if (!empty($matches)) { $cookie = new Cookie('ref', $matches[1], time() + 60 * 60 * 24 * 30 * 12, '/'); $response->headers->setCookie($cookie); } } }
- Объект события передаём в качестве аргумента
- Внутри метода реализуем логику (в данном случае устанавливаем куки)
- Также следует зарегистрировать листенер в services.yaml (см.ниже)
App\EventListener\ResponseListener: tags: - { name: kernel.event_listener, event: kernel.response }
Источники
- Log in to post comments
- 2577 reads