2

私はSymfony2プロジェクトでFOSrestBundleを使用しています。 $translationは自分の束の目的であるJMSシリアライザでパーソナルモデルではないオブジェクトをシリアル化するにはどうすればいいですか?

$view = $this 
    ->view(array(
     'form' => $this->formHandler->getForm()->createView(), 
     'translation' => $translation, 
    ), Response::HTTP_OK) 
    ->setTemplate('MyBundle:Translation.html.twig'); 

:私はこのように作成されたビューを持っています。私が$this->handleView($view)と呼ぶとき、FosRestBundleはJMSシリアライザを使って私のビュー(フォームと翻訳オブジェクト)のデータをシリアル化しますが、私の翻訳オブジェクトは多くの属性を私のケースでは役に立たず、レスポンスは何のためにも大きすぎます私はやろうとしている。

有用な属性のみを取得するためにグループ注釈を使用することにしました。

$context = SerializationContext::create()->setGroups(array('view')); 
$view->setSerializationContext($context); 

そして、私の翻訳モデルで、私はallにExclusionPolicyを設定することができますし、viewグループに便利な属性を追加します。ここでは

viewグループとコンテキストです。これは、作業が、この構成(直列化コンテキストでグループview)(Symfony\Component\Form\FormViewである)私のフォームオブジェクトと私は私の翻訳モデルのためのグループを使用しますが、まだ私のFormViewコントロールオブジェクトをシリアル化するにはどうすればよい{}

にシリアル化されますか?

答えて

0

注釈を使用している場合、JMSシリアライザには各クラスの除外ポリシーがあります(here参照)。

代わりに、デフォルトですべてを除外し、公開するプロパティのみにシリアライザグループアノテーションを追加することをお勧めします。複数のグループを追加することができます。この場合、シリアライザのコンテキストには「フォーム」と「translationBasic」のグループがあり、formViewのすべてのプロパティに「フォーム」グループを追加し、「translationBasic」を翻訳クラスで必要なものだけに追加します。

+0

しかし、ベンダーからFormViewクラスをオーバーライドする必要があります。これはベストプラクティスのようには聞こえません – iBadGamer

関連する問題