Заголовки Symfony onKernelRequest-> установить не получено на @Route

У меня есть функция onKernelRequest когда я хочу добавить настраиваемый заголовок (в моем случаеapi=true||$request->headers->set('api', "true")) и во всем Request $request Я могу получить этот заголовок, но когда я пробую его в аннотации, он терпит неудачу:

  • onKernelRequest:
public function onKernelRequest(RequestEvent $event)
{
    if (!$event->isMasterRequest()) { return; }

    $request = $event->getRequest();
    $request->headers->set('api', "true");
    return;
}
  • Маршрут
/* @Route(
 *     "/user/info/",
 *     name="get_user_info",
 *     methods={"GET"},
 *     condition="request.headers.get('api')"
 * )
  • ошибка
Path almost matches, but Condition "request.headers.get('api')" does not evaluate to "true"

1 ответ

Решение

Слушатель маршрутизатора вызывается перед вашим слушателем.

Маршрутизатор [https://github.com/symfony/http-kernel/blob/master/EventListener/RouterListener.php слушатель слушателя имеет приоритет 32), где, поскольку ваш слушатель имеет приоритет 0 (по умолчанию).

Если вы установите для слушателя более высокий приоритет, чем слушатель маршрутизатора, он должен работать.

Пример использования YAML

services:
    App\EventListener\YourListener:
        tags:
            -
                name: kernel.event_listener
                event: kernel.request
                priority: 40
Другие вопросы по тегам