2016-09-12 4 views
2

私はFOSRestBundleの助けを借りてSymfony3で書かれたREST APIを持っています。Symfonyフォームの単一のデフォルトフィールドを受け入れる方法は?

これは、データ入力(POST、PATCH、PUTアクション)のためのSymfonyフォームクラスを使用しています。これはほぼすべてのエンドポイントで機能します。

しかし、私は、単一のcollectionTypeを持つフォームを使用してリレーションを設定する子エンドポイントを持っています。 POSTリクエストのボディは、次のようになります

curl http://localhost/documents/100/related -d @- <<REQUEST_BODY 
{ 
    "related": [ 
    {"id": 14}, 
    {"id": 23} 
    ] 
} 
REQUEST_BODY 

この情報は、URIにすでに存在すると、ここで冗長なようだと、私は「関連」フィールド名をOMMITしたいと思いますが。

curl http://localhost/documents/100/related -d @- <<REQUEST_BODY 
[ 
    {"id": 14}, 
    {"id": 23} 
] 
REQUEST_BODY 

をしかし、このようにsymfonyのフォームの振る舞いを作成する方法を見ることができない。私はこのようなデータを受け入れるために、フォームを調整したいと思いますか?

明確にするために、JSONリクエストでそのフィールドの名前を指定することなく、単一のフォームフィールドを受け入れる必要があります。

答えて

1

私は同じような問題を抱えていました。何を、私のために働いたことはそれほど(たとえばときの典型的なコントローラ内部)のように、空の名前でという名前のフォームを作成するために、フォーム工場を使用していた:

/** @var $formFactory FormFactory */ 
$formFactory = $this->get('form.factory'); 

$form = $formFactory->createNamed('', $type, $data, $options); 

は、フォームは次のように構成されていることに注意してくださいはすべてのPOST(またはGET)データを消費します。したがって、必要なデータだけが存在することを保証できない場合は、allow_extra_fields

+0

パーフェクト、ありがとうございます。前にこの方法に遭遇することはありませんが、仕事をうまくやっているようです。 – watermanio

関連する問題