2013-11-23 17 views
7

@QueryParam()アノテーションを使用してGETパラメータを取得できますが、クエリ文字列データ(/user?id=123)のみで動作するようです。FOSRestBundle:パラメータのルートと注釈

代わりに/user/123のように指定することをお勧めします。このために、私は@Get("/user/{id}")注釈を使用する場合がありますが、私は見ていない、それは@QueryParam()が持っている追加のメタデータがあります。

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

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

私は注釈の両方を使用している場合は、私はエラーを取得します私の競合のdocblock:私はパス(/user/123)で、いないクエリでIDを持っている必要があり、そして私もを使用する必要が

/** 
* 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それはNelmioApiDocBundleが読んでいるので、です。どうすればこの問題を解決できますか?

答えて

16

FOSRestBundleの@Get注釈が拡張順番にSensioFrameworkExtraBundleの@Route拡張FOSRestBundleの@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

'@ ApiDoc'セクションから' parameters'セクションを削除し、その下に '@param integer $ id Description'を追加すると、そのトリックをするようです – 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"} 
    * } 
    *) 
    */