symfony Обработка событий: Добавить заголовок во всех ответы (header, response)
Primary tabs
Скорее всего надо как минимум слушать событие отдачи Responce или что-то вроде того, как как именно это сделать, тут пока не выяснялось (ограничились отдачи Response с нужными заголовками в функции ответа, размещенной в родительском контроллере для всех контроллеров, которым нужно было отдавать дополнительный заголовок).
То же самое было сделано и в методах аутентификатора для обработки запроса типа OPTIONS
ПРИМЕЧАНИЕ: см. также разрешение OPTIONS для все методов.
Возможное решение
Добавляем обработчик события ответа src/EventListener/CoreEventListener.php с содержимым вроде:
<?php
namespace App\EventListener;
use App\Security\CorsSettings;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
final class CoreEventListener
{
public function onKernelResponse(ResponseEvent $event): void
{
$response = $event->getResponse();
// Добавляем сразу массив заголовков:
$response->headers->add([
'НазваниеЗаголовка1' => 'Значение',
'НазваниеЗаголовка2' => 'Значение',
]);
// Или можно добавить один заголовок:
$response->headers->set(" 'НазваниеЗаголовка", "Значение");
}
}Далее регистрируем наш обработчик событий в config/services.yaml:
# Register EventListener onKernelResponse
App\EventListener\CoreEventListener:
tags:
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
Порядок выполнения обработчиков - "почему response неполный"
В официальной доке по этому поводу написано:
There is an optional attribute for the kernel.event_listener tag called priority, which is a positive or negative integer that defaults to 0 and it controls the order in which listeners are executed (the higher the number, the earlier a listener is executed). This is useful when you need to guarantee that one listener is executed before another. The priorities of the internal Symfony listeners usually range from -256 to 256 but your own listeners can use any positive or negative integer.
-- на деле число может и выходить за диапазон от -256 до 256, напр. как в случае с SessionListener.
Что почитать/источники
- How to add custom headers to every single response (globally) in Symfony 5 https://ourcodeworld.com/articles/read/1466/how-to-add-custom-headers-to-every-single-response-globally-in-symfony-5
- Events and Event Listeners: https://symfony.com/doc/current/event_dispatcher.html
- https://symfony.com/doc/current/reference/events.html
- https://stackoverflow.com/a/59715685
- Log in to post comments
- 2124 reads