2017-06-08 12 views
0

APIを使用してユーザープロフィールを編集しています。ユーザーがデータを編集するページには多くのフィールドがありますが、ユーザーがフォームを送信すると、編集したフィールドのみがAPIエンドポイントに送信されます。また、私はフォームマッピングを使用していません。私が見連想配列のみを使用してエンティティの特定のフィールドを変更するにはどうすればよいですか?

唯一の方法は、このような何か書くことです:

public function editProfile(FormInterface $form, User $user): User 
{ 
    $args = $form->getData(); 

    if ($args['email']) { 
     $user->setEmail($args['email']); 
    } 

    if ($args['phone']) { 
     $user->setPhone($args['phone']); 
    } 

    // ... 

    $this->em->persist($user); 
    $this->em->flush(); 

    return $user; 
} 

をしかし、それはひどい見て、私のフォームはフィールドの数十まで含まれていてもよいです。

この場合、誰かが良い解決法を知っていますか?

+0

なぜドンフォームマッピングを使用していませんか? – miikes

答えて

2

利用形態のマッピングと無効に明確な不足しているフィールドのオプションを指定してフォームを送信:

フォームビルダで:コントローラで

$options->setDefaults([ 
    'data_class' => MyEntity:class 
]); 

$data = $request->request->all(); 
$form->submit($data, false);` 

代わりの$form->handleRequest($request);