2013-05-18 71 views
0

在Symfony的2.2.1是否有可能创造像路​​线:Symfony的2个可选路径URL部分(?通配符)

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

,每一个URL部分是可选的,例如用户可以访问网址

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

甚至

/search/subcategory_ids/2,23 

我想摆脱传统的GET参数远赞成这一点,主要是为了美观上诉。

回答

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]; 
} 
+0

该解决方案解决了这个问题。 但是你失去了路由系统的灵活性,现在你的控制器有了新的责任。 – strum

+0

请注意,此处的路由参数名称({params})必须为小写。 –