1

たとえば、ユーザー アカウントの管理に使用される典型的な Doctrine エンティティを考えると、登録ユーザーに、彼らの職業経歴を変更するために使用されるフィールドのみで構成されるフォームを提供したいとします。これは、説明のみupdateがアクションに返されることを意味します。

public function updateAction(Project $project, Request $request)
{
  $user = SOME_RETRIEVED_USER_OBJECT;
  $form = $this->createForm(new UserForm(), $user);
  $form->bindRequest($request);
  ...
}

ただし、 を実行すると、バイオを除くbindRequestすべての$user属性値が空になります。Symfony で部分的なオブジェクトの更新を実行する方法はありますか?

4

2 に答える 2

4

フォームのフィールドは、更新されるエンティティ プロパティを定義します。最も簡単な方法は、更新して使用する必要がある 1 つのフィールドを持つ別のフォーム タイプを作成することです。

$form = $this->createForm(new UserFormOneField(), $user);

また、この場合に正しい検証グループを選択していることを確認する必要があります。

于 2012-08-08T17:16:50.230 に答える
-1

フォームを受信した POST 値と比較し、存在しない値を削除できます。この関数をコントローラに追加できます:

private function updateFormAccordingToRequest($form){
  $form_fields = array();
  foreach($form->getChildren() as $c) $form_fields[] = $c->getName();
  $post_fields = array_keys($this->getRequest()->request->get($form->getName()));
  $fields_to_remove = array_diff($form_fields, $post_fields);
  foreach($fields_to_remove as $f) $form->remove($f);
  return $form;
}

..そして、部分的な更新を行いたいときはいつでもフォームを更新します:

$form = $this->createForm(new UserForm(), $user);
$form = $this->updateFormAccordingToRequest($form);
$form->bindRequest($request);
于 2012-11-29T06:18:32.830 に答える