Symfony2 REST API - 部分更新

时间:2014-09-03 07:39:11

标签: php rest symfony fosrestbundle

我在Symfony2中使用FOSRestBundle构建REST API。我使用表单使用Doctrine2创建和更新实体。如果我发送所有表单字段,一切正常。例如:

{"first_name":"Pi","last_name":"Wi"}

此人插入正常但现在我只想更新姓氏。

{"last_name":"Wi"}

问题是更新后第一个名称为空,因为表单使用" null"更新实体。价值(因为它没有给出)。是否可以只更新姓氏并忽略名字?

1 个答案:

答案 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.