2013-11-23 3 views
7

Я могу получить параметры GET с аннотацией @QueryParam(), но похоже, что он работает только для данных строки запроса: /user?id=123.FOSRestBundle: маршруты и аннотации для параметров

Я бы предпочел, чтобы это было как /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. 
* 
* @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), а не в запросе, и мне также нужно использовать @QueryParam(), так как он читается NelmioApiDocBundle. Как я могу решить эту проблему? @Get аннотацию

ответ

16

FOSRestBundle простирается 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) 
{ 
    // ... 
} 
+0

nifr, спасибо за вашу помощь! Единственное, что не выглядит красивым, - это то, что один параметр описывается дважды, в '@ Get' и' @ ApiDoc'. –

+0

Если вы отпустите раздел 'parameters' из раздела' @ ApiDoc' и добавьте '@param integer $ id Описание id здесь ниже, что, похоже, делает трюк – lopsided

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"} 
    * } 
    *) 
    */ 

 Смежные вопросы

  • Нет связанных вопросов^_^