FOSRestBundle: маршруты и аннотации для параметров
я могу получить параметры GET с @QueryParam()
аннотация, но похоже, что она работает только для данных строки запроса:/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'
мой конфликтующий docblock:
/**
* Finds and displays a Users entity.
*
* @RestView
* @RestGet("/user/{id}")
* @RestQueryParam(name="id", requirements="d+", default="1", description="User id")
* @ApiDoc(section="Partner Users")
* @param int $id
* @return array
*/
PS мне нужно иметь id в путь (/user/123
), не в запросе, и мне также нужно использовать @QueryParam()
как это читается NelmioApiDocBundle. Как я могу решить эту проблему?
2 ответов
FOSRestBundle это @Get
аннотация расширяет FOSRestBundle в @Route
что в свою очередь расширяет SensioFrameworkExtraBundle в @Route
.
посмотреть код и смотрите главу документации @Route и @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)
{
// ...
}
Если вы хотите описание требований, просто сделайте это в своей аннотации
/**
* @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"}
* }
* )
*/