使用默认{_locale}参数链接到索引

时间:2012-07-29 11:07:37

标签: symfony-2.1

我的项目中有一个语言选择器,使用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生成相同的路线?

2 个答案:

答案 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