我在Symfony2中使用FOSRestBundle构建REST API。我使用表单使用Doctrine2创建和更新实体。如果我发送所有表单字段,一切正常。例如:
{"first_name":"Pi","last_name":"Wi"}
此人插入正常但现在我只想更新姓氏。
{"last_name":"Wi"}
问题是更新后第一个名称为空,因为表单使用" null"更新实体。价值(因为它没有给出)。是否可以只更新姓氏并忽略名字?
答案 0 :(得分:9)
当然,这是可能的。
首先,就RESTful而言,这将是PATCH
请求,因此,如果您正在使用the ClassResourceInterface
based controller approach,则必须在patchAction
方法中添加false
方法你的控制器。
然后,在处理提交的表单时,您需要在控制器中将$clearMissing
<?php
// in your controller's patchAction:
/** @var \Symfony\Component\Form\FormInterface $form */
/** @var \Symfony\Component\HttpFoundation\Request $request */
$form->submit($request, false);
选项传递给表单的提交方法调用,如下所示:
Request
这将告诉表单组件仅更新从表单传递的字段,而不清除缺少的字段(如参数的名称所示)。请参阅source code以供参考。
请注意,从Symfony 3.0开始,将{@ 1}}传递给FormInterface::submit()
方法将被弃用,因此这个答案适用于Symfony 2.x.