2013-05-18 37 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})必須爲小寫。 –