【问题标题】:Symfony onKernelRequest headers->set dont received on @RouteSymfony onKernelRequest headers->set don't received on @Route
【发布时间】:2020-05-25 16:56:27
【问题描述】:

当我想添加一些自定义标头(在我的情况下为 api=true||$request->headers->set('api', "true"))和所有 Request $request 时,我有函数 onKernelRequest 我可以得到该标头但是当我尝试时它在注释上失败了:

  • 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"

【问题讨论】:

    标签: symfony symfony-routing symfony-eventdispatcher


    【解决方案1】:

    路由器监听器在你的监听器之前被调用。

    路由器 [https://github.com/symfony/http-kernel/blob/master/EventListener/RouterListener.php#L158](listener 监听的优先级为 32),而您的监听器的优先级为 0(默认值)。

    如果您将侦听器设置为比路由器侦听器具有更高的优先级,它应该可以工作。

    使用 YAML 的示例

    services:
        App\EventListener\YourListener:
            tags:
                -
                    name: kernel.event_listener
                    event: kernel.request
                    priority: 40
    

    【讨论】:

    • 感谢您的回答,它的工作,但就我而言,我需要写KernelEvents::REQUEST => array('onKernelRequest', 40),
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多