我有一个语言环境选择器作为家庭链接列表,如下所示:
<ul id="menu-locale">
<li id="li-locale_es">
<a href="{{path('home', {'_locale': 'es'})}}"><span class="rotulo-locale">Castellano</span><span class="flag flag_es"></span></a>
</li>
<li id="li-locale_en">
<a href="{{path('home', {'_locale': 'en'})}}"><span class="rotulo-locale">English</span><span class="flag flag_en"></span></a>
</li>
<li id="li-locale_de">
<a href="{{path('home', {'_locale': 'de'})}}"><span class="rotulo-locale">Deutsch</span><span class="flag flag_de"></span></a>
</li>
</ul>
家庭路线的定义如下:
/**
* @Route("/", name="home_default_locale")
* @Route("/{_locale}", name="home", defaults={"_locale" = "es"}, requirements={"_locale" = "[a-z]{2}"})
*/
public function homeAction()
{
$em = $this->getDoctrine()->getManager();
$locale = $this->getRequest()->getLocale();
etc...
}
问题是,当重定向到{{path('home', {'_locale': 'es'})}}
时,它实际上会重定向到/
而不是/es
,这会使控制器获得最后一个活动区域设置而不是es
。我想$locale = $this->getRequest()->getLocale();
是错误的,因为它需要活动的语言环境而不是给定的语言环境,
但我应该怎么做呢?
由于
答案 0 :(得分:1)
您应该在第二个路线定义中省略defaults={"_locale" = "es"}
。
您的路线定义/
和/{_locale}
存在冲突,好像_locale
设置为默认es
,您的路线不是/es
,而是{{1}这将与首先定义的路线发生冲突。