具有动态可选参数的 Symfony 路由
Symfony routing with dynamic optional parameters
我是 Symfony 框架的新手。目前我在 mybundle/Resources/config/routing.yml:
中有路线
fcr_category_head:
path: head/{slug}/{city}/{page}
defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 }
requirements: {page: "\d+"}
问题是当用户使用过滤器将结果缩小到所选城市时,city
选项可用,如果 city
不存在,第二个参数应该是页面。
所以路线变化可以是这样的:
head/slug/city //default page 1 if city is not a number, if number then it is page
head/slug/city/10 //e.g page 10
head/slug/10 //no city parameter, because it is number, page 10
是否可以在路由文件中进行这些组合,或者解决这个问题的唯一方法是在控制器中编写我自己的逻辑?
谢谢。
您可以为同一操作定义两条路线。一个有城市,一个没有。
像这样:
fcr_category_head:
path: head/{slug}/{page}
defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 }
requirements: {page: "\d+"}
fcr_category_head_with_city:
path: head/{slug}/{city}/{page}
defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 }
requirements: {page: "\d+", city: "\w+"}
首先会捕获所有这样的请求
head/slug/10
head/slug
第二个会抓住
head/slug/city
head/slug/city/10
我是 Symfony 框架的新手。目前我在 mybundle/Resources/config/routing.yml:
中有路线fcr_category_head:
path: head/{slug}/{city}/{page}
defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 }
requirements: {page: "\d+"}
问题是当用户使用过滤器将结果缩小到所选城市时,city
选项可用,如果 city
不存在,第二个参数应该是页面。
所以路线变化可以是这样的:
head/slug/city //default page 1 if city is not a number, if number then it is page
head/slug/city/10 //e.g page 10
head/slug/10 //no city parameter, because it is number, page 10
是否可以在路由文件中进行这些组合,或者解决这个问题的唯一方法是在控制器中编写我自己的逻辑?
谢谢。
您可以为同一操作定义两条路线。一个有城市,一个没有。
像这样:
fcr_category_head:
path: head/{slug}/{page}
defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 }
requirements: {page: "\d+"}
fcr_category_head_with_city:
path: head/{slug}/{city}/{page}
defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 }
requirements: {page: "\d+", city: "\w+"}
首先会捕获所有这样的请求
head/slug/10
head/slug
第二个会抓住
head/slug/city
head/slug/city/10