如何仅使用关联数组修改实体中的某些字段?

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

我正在通过 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;
}

但它看起来很糟糕,我的表单可能包含多达几十个字段。

有人知道这种情况的好的解决方案吗?

使用表单映射并提交带有禁用的清除缺失字段选项的表单:

在表单生成器中:

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

在控制器中:

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

而不是$form->handleRequest($request);