我在routing.yml
中配置我的主要路由是这样的:
geekhub_main:
resource: "@GeekhubMainBundle/Resources/config/routing.yml"
prefix: /{_locale}
defaults: { _locale: en }
requirements:
_locale: en|uk
正如这里描述的 Symfony2 文档,但是当我去做一些没有语言环境的页面时,比如 example.com/posts
而不是example.com/en/posts
我收到有关No route found for ...
的错误
那么我做错了什么?
这里有一个相关的帖子堆栈溢出帖子,但我想defaults
比_locale: |en|uk
好得多?
正如您在文档中读到的:
当然,您可以有多个可选占位符(例如 /blog/{slug}/{page}),但可选占位符之后的所有内容 必须是可选的。例如,/{page}/blog 是有效的路径,但页面 将始终是必需的(即简单的/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。