2

我正在使用 Symfony 2.3.4 和 FOSRestBundle 0.13.1。我已将路由配置为由 FOSRestBundle 自动生成。在我将 @QueryParam 注释添加到任何方法之前,一切都很好。此注释更改了路由,而不是从 url 中提取变量,它希望将其作为参数传递。

IE

/**
* @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注解?

4

1 回答 1

2

通过使用QueryParam注释,您声明该$user参数作为查询参数(如/api/user/details?user=foo)提供,因此路由中没有更多的操作参数要包含。

如果要向自动生成的路由添加要求,则必须改用@Rest\Route注释,如

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

请注意,没有与strictor选项等效的nullable选项。如果不满足要求或缺少参数,则路由根本不会匹配,如果没有其他路由匹配请求,则会导致 404 错误。此外,AFAIK 无法将描述附加到路由参数。

于 2013-10-06T10:12:04.017 回答