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,而是 /会和第一个定义的路由冲突