【发布时间】:2016-06-04 22:12:31
【问题描述】:
我已经创建了一个自定义的 LocaleListener:
class LocaleListener implements EventSubscriberInterface
{
public function onKernelRequest(GetResponseEvent $event)
{
if ($request->getSession()->get("language")) {
$lang = $request->getSession()->get("language");
} else {
$lang = $request->getPreferredLanguage(array("de", "en"));
}
$request->getSession()->set('_locale', $lang);
$request->setLocale($request->getSession()->get('_locale', $lang));
}
public static function getSubscribedEvents()
{
return array(
KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
);
}
}
我从会话(如果存在)或浏览器中获取语言代码。现在我想更正/操纵路线。我在路由器中使用_locale 来设置语言代码(en 或de)。现在我想覆盖用户的选择。
例如,LocaleListener 中的语言代码为de。用户现在确实请求了 _locale = en 的 URL(例如:/en 而不是自动 /de)。
如何使用侦听器或其他解决方案强制将用户 _locale 设置为每个控制器外部的 LocaleListener 我的结果?
【问题讨论】: