如何仅使用关联数组修改实体中的某些字段?
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);
我正在通过 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);