在Symfony 2中通过路由设置默认语言环境

Nowiko

我这样配置我的主要路线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文章,但我想defaults比方法更好_locale: |en|uk吗?

发生

如您在文档中所读:

当然,您可以有多个可选的占位符(例如/ blog / {slug} / {page}),但是可选的占位符之后的所有内容都必须是可选的。例如,/ {page} / blog是有效路径,但是始终需要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将是有效的网址因此不是一个很好的选择

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章