Symfony2 /类似路线

时间:2015-08-09 15:31:25

标签: symfony routes

我有类似的路线,symfony2调用第二个路径(子类别),如果我输入somethinkg如“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 }

如何强迫他们打电话给对方?

2 个答案:

答案 0 :(得分:1)

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

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 }

答案 1 :(得分:0)

这是正确的。 Symfony从上到下读取te路线并采用匹配的第一条路线。在您的示例中,网址 cars / 与第二条和第三条路线匹配。因为第二条路线只有变量 {category} & {subcategory} 所有网址 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 网址与第二条路线匹配,其他所有网址都会继续显示该行中的第三条路线。