Symfony 2可选路由url部分(通配符?)


Symfony 2 optional route url parts (wildcard?)

在Symfony 2.2.1中是否可以创建如下路由:

/search/category_ids/1,2,3,4/subcategory_ids/32,23,9/language_ids/10,23,5 ...

每个url部分都是可选的,例如用户可以访问url

/search/category_ids/1,2,3,4/language_ids/10,23,5 ...

或者

/search/subcategory_ids/2,23 

我想摆脱传统的get参数,主要是为了美观。

虽然有些框架不鼓励使用查询字符串,但symfony不会,您应该只在查询字符串中传递参数:

/search?category_ids=1,2,3,4&subcategory_ids=...

这些参数可以通过请求对象访问:

public function searchAction(Request $request) {
    $category_ids = $request->query->get('category_ids');
}

如果你真的需要在路径中传递参数,你可以在路由的末尾使用"match all"参数来达到同样的效果:

@Route("/search/{params}", requirements={"params"=".*"}, defaults={"params"=""})
public function searchAction($params) {
}

你可以这样解析$params:

$parts = explode('/', $params);
$map = array();
for ($i = 0; $i < count($parts); $i+=2) {
    $map[$parts[$i]] = $parts[$i+1];
}