8

我可以使用@QueryParam()注释获取 GET 参数,但它看起来仅适用于查询字符串数据:/user?id=123.

我宁愿拥有它/user/123。为此,我可能会使用@Get("/user/{id}")注释,但我没有看到它有额外的元数据@QueryParam()

name="id", requirements="\d+", default="1", description="User id"

如果我同时使用这两个注释,则会出现错误:

ParamFetcher parameter conflicts with a path parameter 'id' for route 'getone'

我的冲突文档块:

/**
 * Finds and displays a Users entity.
 *
 * @Rest\View
 * @Rest\Get("/user/{id}")
 * @Rest\QueryParam(name="id", requirements="\d+", default="1", description="User id")
 * @ApiDoc(section="Partner Users")
 * @param int $id
 * @return array
 */

PS 我需要在路径 ( /user/123) 中有一个 id,而不是在查询中,而且我还需要使用@QueryParam()NelmioApiDocBundle 读取的 ID。我该如何解决这个问题?

4

2 回答 2

19

FOSRestBundle 的@Get注释扩展了 FOSRestBundle @Route,而后者又扩展了 SensioFrameworkExtraBundle 的@Route

查看代码并查看文档章节@Route 和 @Method

requirementsand属性需要一个defaults数组。

/**
  * @Rest\View
  * @Rest\Get("/user/{id}", requirements={"id" = "\d+"}, defaults={"id" = 1})
  * @ApiDoc(
  *  description="Returns a User Object",
  *  parameters={
  *      {"name"="id", "dataType"="integer", "required"=true, "description"="User Id"}
  *  }
  * )
  */
 public function getAction($id)
 {
    // ...
 }
于 2013-11-23T11:33:01.330 回答
1

如果您想要对需求的描述,只需在注释中执行此操作

   /**
  * @Rest\View
  * @Rest\Get("/user/{id}", requirements={"id" = "\d+"}, defaults={"id" = 1})
  * @ApiDoc(
  *  description="Returns a User Object",
  *  requirements={
  *      {"name"="id", "dataType"="integer", "required"=true, "description"="User Id"}
  *  }
  * )
  */
于 2015-01-29T12:45:21.027 回答