Symfony 默认语言环境和路由
Symfony default locale and routing
我有一个语言环境选择器,它是指向主页的链接列表,如下所示:
<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();
是错误的位,因为它使用活动语言环境而不是给定的语言环境,
但是我应该怎么做呢?
谢谢
您应该在第二个路由定义中省略 defaults={"_locale" = "es"}
。
您的路由定义 /
和 /{_locale}
存在冲突,就好像 _locale
设置为您的默认值 es
您的路由将不是 /es
,而是 /
会和第一个定义的路由冲突
我有一个语言环境选择器,它是指向主页的链接列表,如下所示:
<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();
是错误的位,因为它使用活动语言环境而不是给定的语言环境,
但是我应该怎么做呢?
谢谢
您应该在第二个路由定义中省略 defaults={"_locale" = "es"}
。
您的路由定义 /
和 /{_locale}
存在冲突,就好像 _locale
设置为您的默认值 es
您的路由将不是 /es
,而是 /
会和第一个定义的路由冲突