使用区域设置创建网址在Twig中不起作用

时间:2017-03-29 11:17:38

标签: php symfony twig

我正在使用以下代码在Symfony中创建语言切换器:

<select title="Change Language" onChange="window.location.href=this.value">
   <option value="{{ path(app.request.attributes.get('_route'), {'_locale':'en'}) }}" {% if  app.request.locale == 'en'  %} selected="selected" {% endif %}>English                                </option>
  <option value="{{ path(app.request.attributes.get('_route'), {'_locale':'it'}) }}" {% if  app.request.locale == 'it'  %} selected="selected" {% endif %}>Italiano                                </option>
</select>

当我转到http://localhost:8000/app_dev.php/en/about时,option中的链接是正确的,即:/app_dev.php/en/about/app_dev.php/it/about但是如果我在没有指定区域设置的情况下转到同一页面,在http://localhost:8000/app_dev.php/about中创建了option个不正确的链接:/app_dev.php/about?_locale=it/app_dev.php/about?_locale=en

我的控制器中的about动作如下所示:

 /**
 * @Route("/{_locale}/about", name="aboutUs", defaults={"_locale" = "en"}, requirements={"_locale" = "en|de|fr|es|it"})
 * @Route("/about")
 */

public  function aboutAction(){
    return $this->render('default/frontend/about.html.twig');
}

我该如何纠正?

1 个答案:

答案 0 :(得分:0)

首先,删除你的第二个@Route。

之后,安装https://github.com/schmittjoh/JMSI18nRoutingBundle 使用此捆绑包,您可以按照自己的意愿执行系统URL。

下来你有一个配置的例子。

jms_i18n_routing:
    default_locale: en
    locales: [es, it, fr, pl, pt, en, de, ca]
    strategy: prefix_except_default