我想在每个请求上检查来自用户实体的内容,如果满足某些条件,我想执行重定向。试过这个:
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
有关如何让用户进入内核事件的任何建议吗?
答案 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
如何最好地做到这一点。