2012-07-29 85 views
1

我在我的项目中有一个语言选择器重定向到与区域设置参数{_locale}的索引页,但是当链接是默认语言环境seted在routing.yml中,链接看起来不同。这是我的代码:链接索引与默认{_locale}参数

我生成代码的链接:

<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 

这产生propertly所有语言的路线,买了默认一个看起来不一样:

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为ou r默认的语言代码。我正在使用Symfony 2.1

任何人都知道如何为默认lang生成相同的路由?

回答

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

1

这是因为要求的条件和UrlGenerator中提供的参数而发生的 - 通过参数数组传递的未知参数会自动附加在URL的末尾作为GET参数。

你尝试把默认的语言环境中config.yml,而不是有它的路线defaults部分?

Symfony的-2.0

framework: 
    session: { default_locale: es } 

Symfony的-2.1

framework: 
    default_locale: es 
+0

是的,我把它定义。为什么其他语言能正常工作?这是一样的情况。如果我在routing.yml中使用其他语言作为默认语言,则会发生其他语言 – unairoldan 2012-07-29 18:33:22

+0

@ Ztere0您使用的是哪个版本的Syfmony? 2.0还是2.1? – 2012-07-29 19:55:41

+0

Symfony 2.1,对不起,我在帖子中没有提到 – unairoldan 2012-07-29 20:53:49