Petr Flaks
Petr Flaks

Reputation: 583

How to modify certain fields in entity using only associative array?

I'm implementing editing user profile via API. The page where user edits its data contains a lot of fields, but when user submits the form, only edited fields are sent to my API endpoint. Also I'm not using form mapping.

Only way I see is to write something like this:

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;
}

But it looks terrible and my form may contain up to several tens of fields.

Does anybody know good solution for this case?

Upvotes: 0

Views: 47

Answers (1)

miikes
miikes

Reputation: 974

Use form mapping and submit form with disabled clear missing fields option:

In form builder:

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

In controller:

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

instead of $form->handleRequest($request);

Upvotes: 2

Related Questions