2016-06-16 9 views
0

私はSymfony2でFOSRestBundleを使用してRESTサービスを提供しています。Symfony2 FOSRestBundleフォームに含まれるエンティティフィールドを返します

現在、私のコントローラは、リソースが要求されたときにエンティティを返します(例:/users/40)。 フロントエンドには、このリソースを操作するためのフォームが含まれており、PUTを使用して返信します。コントローラは、フォームを使用してデータを処理します。

私の問題は、フォーム全体のエンティティ(idpassword_hashが良い例です)よりフィールドが少ないことです。私は、エンティティ全体をクライアントに送ることは悪い考えであるという結論に達しました。代わりに、私はFOSRestBundleがフォーム内で利用可能なエンティティフィールドだけを送るようにします。

だから私はちょうど試してみました:

return $this->createForm(UserType::class, $entity); 

FOSRestBundleにより、サーバから返されたJSONの構造は非常によさそうです。しかし残念ながら、それは値を含んでいません。

もちろん、フォームはバインドされていません。この時点では、データをバインドすることは意味がありません。したがって、私は別の解決策を見つける必要があります。

このユースケースは、私のアプリケーションで非常によく起こります。だから、これを達成するための簡単な標準的な方法がないのだろうかと思います。

(PS私は単にスコープにエンティティリソースJSONを取り付けると自動的にスコープの正しいオブジェクトにバインドされたフォームフィールドを生成するためにsymfonyのフォームテンプレートを使用する。フロントエンドの角度JSを使用)

答えて

1

FOSから返されるものを定義する標準的な方法は、シリアライザグループとSymfonyシリアライザコンポーネントまたはJMSシリアライザのどちらかを使用することです。あなたは、エンティティのプロパティでグループを定義し、両方のケースで

:その後、

// in the entity 
use Symfony\Component\Serializer\Annotation\Groups; 

class Story 
{ 
    /** 
    * @Groups({"story"}) 
    * 
    * @var int 
    */ 
    private $id; 

そして:あなたにさらさコントローラシリアライザグループに一致するプロパティを持つオブジェクトまたはオブジェクトを返します

// in the controller 
* @Rest\View(serializerGroups={"story"}) 
* @Rest\Route("stories") 
* 
* @return Story[] 
*/ 
public function getStoriesAction() 

関連する問題