Symfony如何让UserLocaleSubscriber仅对User实体生效,排除InMemory用户
解决方案
你只需要在获取登录用户后增加类型判断,仅当用户是你自定义的User实体实例时再执行locale设置逻辑即可,修改后的代码如下:
class UserLocaleSubscriber implements EventSubscriberInterface { private $session; public function __construct(SessionInterface $session) { $this->session = $session; } public function onInteractiveLogin(InteractiveLoginEvent $event) { $user = $event->getAuthenticationToken()->getUser(); // 仅针对自定义User实体执行逻辑 if ($user instanceof \App\Entity\User && null !== $user->getLocale()) { $this->session->set('_locale', $user->getLocale()); } } public static function getSubscribedEvents() { return [ SecurityEvents::INTERACTIVE_LOGIN => 'onInteractiveLogin', ]; } }
注意将代码中的\App\Entity\User替换为你项目中自定义User类的完整命名空间。
原方法无效说明
isGranted()是用于校验用户权限的方法,和用户实体的类型没有直接关联,因此无法实现按实体类型过滤执行逻辑的需求。
内容的提问来源于stack exchange,提问作者mardon
相关产品推荐
相关产品推荐

