在symfony2 routing.yml中我试图创建一个带有可选参数的路由,如下所示:
/app/type/{typeValue}/page/{page}
所以,一个可行的例子是:
/app/test/type/hello/page/1
我的路线是:
api_test:
pattern: /api/test/type/{typeValue}/page/{page}
defaults: { _controller: TestCoreBundle:Json:test, page:1 }
这很好,但我希望/ type / {typeValue}和/ page / {page}可选,所以它也适用于这样的网址:
/app/test
/app/test/page/3
/app/test/type/myType
我的其他路线也会包含更复杂的可选参数,因此解决此问题对我来说非常重要。我需要做什么,以便我不需要创建单独的路线,因此它支持每一个组合?
答案 0 :(得分:0)
动态路由参数仍然需要填充或默认,我建议将这些作为选项传递,然后附加到查询字符串,例如?page = 1& myType = blah,并在控制器中使用$ request-> get() ,基类。
答案 1 :(得分:0)
如symfony page所述,可选占位符之后的所有内容也必须是可选的。
当然,您可以拥有多个可选的占位符(例如
/blog/{slug}/{page}
),但是在可选占位符之后的所有内容 必须是可选的。例如,/{page}/blog
是有效路径,但是页面 将始终是必需的(即简单地/blog
将不匹配此路线。)
在您的情况下,{typeValue}
是可选的,但后跟/page/
,这不是可选的,因此此路径永远不会同时使用这两个参数。
您可以使用查询字符串或将路由更改为
api_test:
pattern: /api/test/{typeValue}/{page}
defaults: { _controller: TestCoreBundle:Json:test, typeValue: 'default', page: 1 }
requirements:
page: \d+
然后您就可以使用路线
/app/test
/app/test/myType
/app/test/myType/3
但即便如此,路由/app/test/3
也是不可能的,因为symfony会将此解释为$typeValue = 3
和$page
作为默认值。