在Symfony 2中设置带路由的默认语言环境

时间:2015-01-10 08:35:55

标签: php symfony localization routing internationalization

我在routing.yml中配置我的主路线,如下所示:

geekhub_main:
resource: "@GeekhubMainBundle/Resources/config/routing.yml"
prefix:   /{_locale}
defaults: { _locale: en }
requirements:
    _locale: en|uk

如此处Symfony2 docs所述,但当我去一些没有语言环境的页面时,就像 example.com/posts代替example.com/en/posts我收到有关No route found for ...

的错误消息

那么我做错了什么?

此处有相关帖子stackoverflow post,但我认为defaults_locale: |en|uk更好?

1 个答案:

答案 0 :(得分:2)

正如您可以在文档中看到的那样:

  

当然,您可以拥有多个可选的占位符(例如   / blog / {slug} / {page}),但是在可选占位符之后的所有内容   必须是可选的。例如,/ {page} / blog是一个有效的路径,但页面   将始终是必需的(即简单/博客将不符合此路线)。

如果您有_locale作为前缀,路由器将要求您始终添加它(即使您添加了默认值)。

如果不是前缀,您的路线如下:

_test:
    path: /test/{_locale}
    defaults: { _controller: AcmeDemoBundle:Demo:contact, _locale: en }
    requirements:
        _locale: en|uk

/test可行,/test/en可行。

所以,使用前缀,我认为更好,更优雅的方法是定义多种模式:

_test:
  path:   /test
  defaults: { _controller: AcmeDemoBundle:Demo:contact, _locale: en }

_test_:
  path:   /{_locale}/test
  defaults:  { _controller: AcmeDemoBundle:Demo:contact}
  requirements:
      _locale:  en|uk

test也可行,/en/test也可以。

解决方案:

requirements:
   _locale:  |en|uk
由于//test是有效的网址,

不是一个好的选择。