2016-04-05 6 views
1

私はfosrestbundleを使ってパッチメソッドを実装しています。私は適切なパッチメソッドを作成したいと思います。リクエストオブジェクトからフォームへのdiff変更のみを適用する方法

私はcontrolerを作成しましたが、引数Entityを取るpatchActionがあります。私が書いたParamConverter経由でEntityが作成されます。エンティティはEntityTypeに渡され、ここに問題があります。私は変更されたフィールドだけを更新したいと思います。フォームにEntityを渡すと、nullsを要求から来るオブジェクトに設定します。エンティティは、ここ

  1. ユーザーが送信する流れだPOPO

    ですPATCH要求へ/エンティティ/ {エンティティ} 12

  2. Paramのコンバータは、データ用のDBを求め、適切なエンティティに12を変換/エンティティ/さんが言わせ
  3. EntityFormTypeは、引数としてEntityをとり、要求からエンティティにデータを設定します。
  4. エンティティは、それがフォーム上でヌルであるフィールドにNULLセットオブジェクト全体エンティティを取り後の問題は、そのフォームであるDB

に格納されています。私はそれがこれらの値を取って、それを例えばデフォルトとして設定するのが好きです。

doctrine ORMは使用できません。

コード:

/** 
* @ParamConverter("Entity", class="Entity") 
*/ 
public function patchAction(Entity $entity, Request $request) 
{ 
    var_dump($entity); // object mapped from DB 
    $form = $this->createForm(new EntityType(), $entity); 
    $form->handleRequest($request); 
    $form->submit($request); 
    var_dump($entity);exit; //here I get only values that i passed through patch method, rest of them is set to null 
} 

私は、フォームのイベントを考えるか、差分法のようなものを作成しますが、おそらくよりよい解決策はありましたか?

答えて

2

methodオプションを設定してフォームを作成する必要があります。

$form = $this->createForm(new EntityType(), $entity, array(
    'method' => $request->getMethod(), 
)); 

リクエストがPATHメソッドで送信される場合、symfonyは送信フィールドのみを更新します。それは、私はそれが些細なことを知っていたが、解決策を見つけることができませんでし働いhttp://symfony.com/doc/current/cookbook/routing/method_parameters.html#faking-the-method-with-method

+0

おかげパヴェル:

どのように偽のSymfonyでPATCH方法。 Dzięki! – Robert

関連する問題