2013-11-23 17 views
7

Jestem w stanie uzyskać parametry GET z adnotacją @QueryParam(), ale wygląda na to, że działa tylko w przypadku danych String zapytania: /user?id=123.FOSRestBundle: trasy i adnotacje dla parametrów

Zamiast tego wolałbym mieć to jako /user/123. W tym celu można użyć @Get("/user/{id}") adnotacji, ale nie widzę, że ma dodatkowe metadane, które @QueryParam() ma:

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

Jeśli używam obu adnotacji, otrzymuję błąd:

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

My sprzeczne bloku dokumentacyjnym:

/** 
* 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 muszę mieć identyfikator w ścieżce (/user/123), a nie w zapytaniu, a ja też trzeba używać @QueryParam() czytany przez NelmioApiDocBundle. Jak mogę rozwiązać ten problem?

Odpowiedz

16

FOSRestBundle za @Get adnotacji rozszerza FOSRestBundle na @Route która z kolei rozciąga SensioFrameworkExtraBundle na @Route.

Zajrzyj do code i zapoznaj się z dokumentacją rozdział @Route and @Method.

Atrybuty requirements i defaults oczekują tablicy.

/** 
    * @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, dzięki za pomoc! Jedyną rzeczą, która nie wygląda ładnie, jest to, że pojedynczy parametr jest opisywany dwa razy, w '@ Get' i' @ ApiDoc'. –

+0

Jeśli upuścisz sekcję 'parameters' z sekcji' @ ApiDoc' i dodasz '@param integer $ id Opis id tutaj 'poniżej, który wydaje się być skuteczny – lopsided

1

Jeśli chcesz opis wymagań prostu zrobić to w swojej adnotacji

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