Symfony2 / 类似路线

Symfony2 / Similar routes

我有类似的路线,symfony2 调用第二条路线(子类别),如果我输入类似“example.com/cars/insert/.

的东西
web_portal_category:
path:     /{category}/
defaults: { _controller: WebPortalBundle:Default:category }

web_portal_subcategory:
path:     /{category}/{subcategory}/
defaults: { _controller: WebPortalBundle:Default:subcategory }

web_portal_insert:
path:     /{category}/insert/
defaults: { _controller: WebPortalBundle:Default:upload }

我怎样才能强迫他们说对呢?

你把它们放在正确的顺序,因为一旦找到匹配项,路由组件就会停止并执行该操作:

web_portal_insert:
path:     /{category}/insert/
defaults: { _controller: WebPortalBundle:Default:upload }

web_portal_subcategory:
path:     /{category}/{subcategory}/
defaults: { _controller: WebPortalBundle:Default:subcategory }

web_portal_category:
path:     /{category}/
defaults: { _controller: WebPortalBundle:Default:category }

没错。 Symfony 从上到下读取路由并采用第一个匹配的路由。在您的示例中, url cars/insert/ 与第二条和第三条路线匹配。因为第二条路由只有变量 {category} & {subcategory} 所有 urls x/y/会匹配到第三条路由永远不会到达

如果你像这样交换第二条和第三条路线,事情就会改变。

web_portal_category:
path:     /{category}/
defaults: { _controller: WebPortalBundle:Default:category }

web_portal_insert:
path:     /{category}/insert/
defaults: { _controller: WebPortalBundle:Default:upload }

web_portal_subcategory:
path:     /{category}/{subcategory}/
defaults: { _controller: WebPortalBundle:Default:subcategory }

在这种情况下,只有 /x/insert url 将匹配第二条路线,所有其他路线将继续行中的第三条路线。