我找到了一个解决方案,不是最好的解决方案,但有效
在我的主页上
主页控制器
公共函数 indexAction()
{
$request = $this->get('request');
/**
* 将其存储到会话中的用户语言
*/
$sessionId = $this->get("session");
if($sessionId->get("lingua")==""){
$this->get('session')->set('lingua', $request->getLocale());
}
返回数组();
}
在已被覆盖的 FOSUserBundle 的另一个包中
UserBundle/Controller/RegistrationController.php(例如)
公共函数 customAction() {
/**
* 将其存储到会话中的用户语言
*/
$sessionId = $this->container->get("session");
if($sessionId->get("lingua")==""){
$this->container->get("session")->set('lingua', $this->container->get('request')->getLocale());
}
返回数组(
);
}
然后我创建一个服务,如:http ://symfony.com/doc/current/cookbook/session/locale_sticky_session.html
服务.xml
服务:
acme_locale.locale_listener:
类:Acme\LocaleBundle\EventListener\LocaleListener
参数:["%kernel.default_locale%",@session]
标签:
- {名称:kernel.event_subscriber}
语言环境监听器
命名空间 Acme\LocaleBundle\EventListener;
使用 Symfony\Component\HttpKernel\Event\GetResponseEvent;
使用 Symfony\Component\HttpKernel\KernelEvents;
使用 Symfony\Component\EventDispatcher\EventSubscriberInterface;
使用 Symfony\Component\HttpFoundation\Session;
SnLocaleListener 类实现 EventSubscriberInterface
{
私人 $defaultLocale;
私人$会话;
公共函数 __construct($defaultLocale = 'it', $session)
{
$this->defaultLocale = $defaultLocale;
$this->session = $session;
}
公共函数 onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if (!$request->hasPreviousSession()) {
返回;
}
//incapsula la lingua in sessione se siste
$locale_session = $this->session->get('lingua');
if ($locale_session == "") {
// prova a vedere se il locale sia stato imppostato come parametro _locale di una rotta
if ($locale = $request->attributes->get('_locale')) {
$request->getSession()->set('_locale', $locale);
} 别的 {
// se non trova un locale esplito in questa Richiesta, 美国 quello della sessione
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}
} 别的 {
$request->setLocale($request->getSession()->get('_locale', $locale_session));
$request->getSession()->set('_locale', $locale_session);
$request->attributes->set('_locale', $locale_session);
}
}
公共静态函数 getSubscribedEvents()
{
返回数组(
// deve essere registrato prima dell'ascoltatore predefinito di locale
KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
);
}
}
对不起我的英语不完美..这个解决方案对我有用,它不会是最好的