如何使用symfony 3.4(php)更改语言环境?
我为我的数据库中的每个用户保存了语言环境。现在在this page上他们解释说你应该创建一个事件监听器来设置语言环境。但是它们只提供了一种方法 - 我在哪个类中使用此方法,如何使用我的services.yml连接它?
如果我在服务中 - 如何访问我的用户对象以实际获取我想要设置的语言环境?
答案 0 :(得分:3)
这是example provided by the docs on how to create an kernel request listener。
在此侦听器中,您将注入TokenStorage服务器,然后该服务器将为您提供当前令牌,并为其提供当前登录的附加用户。然后,您将从用户处获取区域设置并将其设置为请求。
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class RequestListener
{
private $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
public function onKernelRequest(GetResponseEvent $event)
{
$user = $this->tokenStorage->getToken()->getUser();
$request = $event->getRequest();
$request->setLocale($user->getLocale());
}
}
要理解,为什么Symfony需要接口的类型提示而不是类please read the documentation。