Symfony4内核事件执行重定向并依赖于用户

时间:2018-01-08 20:23:29

标签: php symfony events symfony4

我想在每个请求上检查来自用户实体的内容,如果满足某些条件,我想执行重定向。试过这个:

public static function getSubscribedEvents()
{
    return [
        KernelEvents::REQUEST => [
            ['watcher', 0],
        ]
    ];
}

public function watcher(GetResponseEvent $event)
{
    if (!$event->isMasterRequest()) return;

    /** @var Request $request */
    $request = $event->getRequest();
    echo "User: " . $request->getUser();
    exit();
}

但$ request-> getUser()返回null

有关如何让用户进入内核事件的任何建议吗?

1 个答案:

答案 0 :(得分:2)

$request->getUser() 会返回已经过安全组件验证的用户对象,而是返回HTTP基本身份验证的用户名部分。

例如,如果您请求http://username:password@example.com/,则"username"将包含security.token_storage

要获取用户对象,您必须将$tokenStorage->getToken()->getUser()服务注入事件订阅者,然后致电getToken()

请注意,getUser()null都可以返回new Entry(i, value, icon),因此您应该先检查两者。看看the getUser() implementation in Symfony's ControllerTrait如何最好地做到这一点。