FOSRestBundle: routes and annotations for parameters

fosrestbundle, symfony

Solution

FOSRestBundle's `@Get` annotation extends FOSRestBundle's `@Route` which in turn extends SensioFrameworkExtraBundle's `@Route`.

Have a look at the code and see the documentation chapter @Route and @Method.

The `requirements` and `defaults` attributes expect an array.

/**
  * @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)
 {
    // ...
 }

Problem

I'm able to get GET parameters with `@QueryParam()` annotation, but it looks like it works for Query String data only: `/user?id=123`. I'd prefer to have it like `/user/123` instead. For this, I might use `@Get("/user/{id}")` annotation, but I don't see it has additional metadata which `@QueryParam()` has: ``` name="id", requirements="\d+", default="1", description="User id" ``` If I use both of the annotations, I get an error: ``` ParamFetcher parameter conflicts with a path parameter 'id' for route 'getone' ``` My conflicting docblock: ``` /** * 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 I need to have an id in the path (`/user/123`), not in query, and I also need to use `@QueryParam()` as it's read by NelmioApiDocBundle. How may I resolve this issue?

Original source