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 }Источники
- https://symfony.ru/doc/current/reference/events.html
- Log in to post comments
- 3229 reads