2013-10-02 27 views
2

我使用Symfony 2.3.4和FOSRestBundle 0.13.1。 我已將路由配置爲由FOSRestBundle自動生成。 Eveything很好用,直到我將@QueryParam註釋添加到任何方法。這個註釋改變了路由,而不是從它期望它作爲參數傳遞的URL中提取變量。FOSRESBundle路由@QueryParam

/** 
* @return array 
* @Rest\View 
*/ 
public function getDetailsAction($user) { 
...... 
} 

-bash-4.2$ php app/console router:debug 
get_details  GET ANY ANY /api/users/details/{user} 

但只要我添加了註釋@QueryParam,我的路線更改爲:

/** 
* @QueryParam(name="user", requirements="\w+", strict=true, nullable=false, description="Name of the user to query details for") 
* @return array 
* @Rest\View 
*/ 
public function getDetailsAction($user) { 
...... 
} 

-bash-4.2$ php app/console router:debug 
get_details  GET ANY ANY /api/users/details 

爲什麼我的路線發生改變?是不是可以保留原始路線並同時使用@QueryParam註釋?

回答

2

通過使用QueryParam註釋,聲明該$user參數爲查詢參數(如/api/user/details?user=foo)提供的,所以有沒有更多的動作參數留在路線包括。

如果你想要求添加到自動生成的路線,你有

/** 
* @Rest\View 
* @Rest\Route(requirements={"user"="\w+"}) 
*/ 
public function getDetailsAction($user) { 
----- 
} 

注意,沒有相當於strictnullable選擇使用@Rest\Route註解來替代,如。如果未滿足要求或參數丟失,則路由不會匹配,如果沒有其他路由與請求匹配,則會導致404錯誤。此外,AFAIK無法將描述附加到路由參數。