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

时间:2013-05-18 10:37:02

标签: php symfony routing wildcard

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

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

其中每个网址部分都是可选的,例如用户可以访问网址

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

甚至

/search/subcategory_ids/2,23 

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

1 个答案:

答案 0 :(得分:2)

虽然有些框架不鼓励使用查询字符串,但symfony却没有,你只需要在查询字符串中传递参数:

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

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

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

如果你真的需要传递路径中的参数,你可以通过路径末尾的“全部匹配”参数获得相同的结果:

@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];
}