【问题标题】:Set default locale with routing in Symfony 2在 Symfony 2 中使用路由设置默认语言环境
【发布时间】:2015-01-10 08:35:55
【问题描述】:

我在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 更好?

【问题讨论】:

    标签: php symfony localization routing internationalization


    【解决方案1】:

    您可以在文档中阅读:

    当然,您可以有多个可选占位符(例如 /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 将是一个有效的 URL。

    【讨论】:

    • 那么我怎么理解我需要在我的每个包的 routing.yml 中的每个路径中添加两个变量?
    • @excluded_once 不,一点也不,你可以解决这个问题。
    • @acontell 抱歉,我会要求您记住此解决方案,但您能告诉我们如何避免遍历所有路由,因为我有一个包含数百条路由的应用程序,我不能只是遍历所有这些并将它们设置为使用两种不同的变体
    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 2017-11-01
    • 1970-01-01
    • 2020-04-05
    • 2014-03-31
    相关资源
    最近更新 更多