Symfony UseLocaleSubscriber 和 InMemoryUser
Symfony UseLocaleSubscriber and InMemoryUser
我有 UserLocaleSubscriber
来自 Symfony 文档的用户切换区域设置。但是我的管理员用户存储在“内存中”,InMemoryUser
class 没有 getLocale()
方法。
我如何才能 运行 此订阅者仅供用户 User
实体使用。我尝试了 isGranted()
但无法正常工作。
class UserLocaleSubscriber implements EventSubscriberInterface
{
private $session;
public function __construct(SessionInterface $session)
{
$this->session = $session;
}
public function onInteractiveLogin(InteractiveLoginEvent $event)
{
$user = $event->getAuthenticationToken()->getUser();
if (null !== $user->getLocale()) {
$this->session->set('_locale', $user->getLocale());
}
}
public static function getSubscribedEvents()
{
return [
SecurityEvents::INTERACTIVE_LOGIN => 'onInteractiveLogin',
];
}
}
如果用户实例不是 Symfony\Component\Security\Core\User\InMemoryUser
类型(如果您使用的是 Symfony 5.3)或 Symfony\Component\Security\Core\User\User
如果您还没有达到该版本,则仅应用语言环境更改。
或者更好的是,检查您获得的用户实体是否符合您的预期。假设您的用户实体是 App\Entity\User
:
public function onInteractiveLogin(InteractiveLoginEvent $event)
{
$user = $event->getAuthenticationToken()->getUser();
if ( $user instanceof App\Entity\User && null !== $user->getLocale()) {
$this->session->set('_locale', $user->getLocale());
}
}
我有 UserLocaleSubscriber
来自 Symfony 文档的用户切换区域设置。但是我的管理员用户存储在“内存中”,InMemoryUser
class 没有 getLocale()
方法。
我如何才能 运行 此订阅者仅供用户 User
实体使用。我尝试了 isGranted()
但无法正常工作。
class UserLocaleSubscriber implements EventSubscriberInterface
{
private $session;
public function __construct(SessionInterface $session)
{
$this->session = $session;
}
public function onInteractiveLogin(InteractiveLoginEvent $event)
{
$user = $event->getAuthenticationToken()->getUser();
if (null !== $user->getLocale()) {
$this->session->set('_locale', $user->getLocale());
}
}
public static function getSubscribedEvents()
{
return [
SecurityEvents::INTERACTIVE_LOGIN => 'onInteractiveLogin',
];
}
}
如果用户实例不是 Symfony\Component\Security\Core\User\InMemoryUser
类型(如果您使用的是 Symfony 5.3)或 Symfony\Component\Security\Core\User\User
如果您还没有达到该版本,则仅应用语言环境更改。
或者更好的是,检查您获得的用户实体是否符合您的预期。假设您的用户实体是 App\Entity\User
:
public function onInteractiveLogin(InteractiveLoginEvent $event)
{
$user = $event->getAuthenticationToken()->getUser();
if ( $user instanceof App\Entity\User && null !== $user->getLocale()) {
$this->session->set('_locale', $user->getLocale());
}
}