2013-11-23 3 views
7

Ich bin in der Lage, GET-Parameter mit @QueryParam() Annotation abrufen, aber es sieht aus wie es nur für Query String Daten funktioniert: /user?id=123.FOSRestBundle: Routen und Anmerkungen für Parameter

Ich würde es lieber wie /user/123 stattdessen haben. Dazu könnte ich @Get("/user/{id}") Anmerkung verwenden, aber ich sehe nicht, hat es zusätzliche Metadaten, die @QueryParam() hat:

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

Wenn ich beide der Annotationen verwenden, erhalte ich eine Fehlermeldung:

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

Meine widersprüchliche 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 ich brauche eine ID auf dem Weg zu haben (/user/123), nicht in Abfrage, und ich brauche auchzu verwenden, wie es von NelmioApiDocBundle gelesen wird. Wie kann ich dieses Problem beheben?

Antwort

16

FOSRestBundle der @Get Annotation erstreckt FOSRestBundle des @Route die wiederum erstreckt SensioFrameworkExtraBundle des @Route.

Werfen Sie einen Blick auf die code und sehen Sie die Dokumentation Kapitel @Route and @Method.

Die Attribute requirements und defaults erwarten ein 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) 
{ 
    // ... 
} 
+0

nifr, vielen Dank für Ihre Hilfe! Das einzige, was nicht gut aussieht, ist, dass der einzelne Parameter zweimal beschrieben wird, in '@ Get' und' @ ApiDoc'. –

+0

Wenn Sie den 'Parameter'-Bereich aus dem '@ ApiDoc'-Bereich entfernen und' @param integer $ id Beschreibung von id hier 'darunter einfügen, scheint das den Trick zu machen – lopsided

1

Wenn Sie eine Beschreibung für Anforderungen wollen tun dies nur in Annotations

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