我在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
更好?
答案 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
是有效的网址,不是一个好的选择。