Symfony默认语言环境和路由

时间:2015-02-16 11:21:52

标签: symfony localization

我有一个语言环境选择器作为家庭链接列表,如下所示:

<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();是错误的,因为它需要活动的语言环境而不是给定的语言环境,

但我应该怎么做呢?

由于

1 个答案:

答案 0 :(得分:1)

您应该在第二个路线定义中省略defaults={"_locale" = "es"}

您的路线定义//{_locale}存在冲突,好像_locale设置为默认es,您的路线不是/es,而是{{1}这将与首先定义的路线发生冲突。