You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 17:24:03