我可以使用@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,而不是在查询中,我还需要使用NelmioApiDocBundle读取的@QueryParam()
。我该如何解决这个问题?
答案 0 :(得分:18)
FOSRestBundle的@Get
注释扩展了FOSRestBundle的@Route
,后者又扩展了SensioFrameworkExtraBundle的@Route
。
查看code并查看文档章节@Route and @Method。
requirements
和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)
{
// ...
}
答案 1 :(得分: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"}
* }
* )
*/