填写所有必填参数

时间:2012-06-26 08:54:45

标签: symfony routing twig

Symfony2中有一个多语言网站。在基本布局中,语言切换如下:

<a href="{{ path(app.request.attributes.get('_route'), {_locale: 'en'}) }}">EN</a>
<a href="{{ path(app.request.attributes.get('_route'), {_locale: 'fr'}) }}">FR</a>

这可以在不更改当前页面的情况下正常切换语言。但是,如果存在其他参数,则会因为“缺少必需参数”而引发异常。如何克服这个?

2 个答案:

答案 0 :(得分:4)

您可以执行以下操作:

<a href="{{ path(app.request.attributes.get('_route'), app.request.query.all|merge({'_locale': 'en'})) }}">EN</a>
<a href="{{ path(app.request.attributes.get('_route'), app.request.query.all|merge({'_locale': 'fr'})) }}">FR</a>

这样做是将_locale参数与现有查询参数合并。

答案 1 :(得分:2)

这是我的解决方案,使用Symfony 2.2到2.5

<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'en'})) }}">English</a>
<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'fr'})) }}">Français</a>
<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'es'})) }}">Español</a> 

这是我的解决方案,使用Symfony 2.0到2.1

<a href="{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'_locale': 'en'})) }}">English</a>
<a href="{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'_locale': 'fr'})) }}">Français</a>
<a href="{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'_locale': 'es'})) }}">Español</a>