我的项目中有一个语言选择器,使用locale参数{_locale}重定向到索引页面,但是当链接到routing.yml中的默认语言环境时,链接看起来不同。这是我的代码:
我在代码中生成链接:
<a href="{{ path('ProjectBaseBundle_index', {'_locale': country.idlang}) }}">
...
</a>
这是routing.yml:
ProjectBaseBundle_index:
pattern: /{_locale}
defaults: { _controller: ProjectBaseBundle:Default:index, _locale: es }
requirements:
_locale: en|fr|de|es
这会生成所有语言的路线,默认购买的路线看起来不同:
http://project.dev/app_dev.php/en
http://project.dev/app_dev.php/fr
http://project.dev/app_dev.php/de
http://project.dev/app_dev.php/?_locale=es
es 是我们的默认语言代码。我正在使用Symfony 2.1
任何人都知道如何为默认的lang生成相同的路线?
答案 0 :(得分:1)
这是因为UrlGenerator
中的需求条件和提供的参数 - 通过arguments数组传递的未知参数会自动作为GET参数附加在URL的末尾。
您是否尝试将默认区域设置放在config.yml
中而不是将其置于路由的defaults
部分中?
<强>的Symfony-2.0 强>:
framework:
session: { default_locale: es }
<强>的Symfony-2.1 强>:
framework:
default_locale: es
答案 1 :(得分:0)
我刚刚发现它有意义,因为默认语言不存在参数{_locale},因此系统将参数作为GET参数附加。
我找到了解决方法:
ProjectBaseBundle_default:
pattern: /{_locale}
defaults: { _controller: ProjectBaseBundle:Default:index , _locale: %locale% }
ProjectBaseBundle_index:
pattern: /{_locale}
defaults: { _controller: ProjectBaseBundle:Default:index }
requirements:
_locale: en|fr|de|es
我在Symfony董事会中开了一个问题:https://github.com/symfony/symfony/issues/5135