Php Symfony2 REST API-部分更新

Php Symfony2 REST API-部分更新,php,rest,symfony,fosrestbundle,Php,Rest,Symfony,Fosrestbundle,我正在用Symfony2中的FOSRestBundle构建一个restapi。我使用表单创建和更新具有Doctrine2的实体。如果我发送所有表单字段,一切正常。例如: {"first_name":"Pi","last_name":"Wi"} 插入的人很好,但现在我只想更新姓氏 {"last_name":"Wi"} 问题是,在更新之后,第一个名称是空的,因为表单使用“null”值更新实体(因为它没有给定)。是否可以只更新姓而忽略名?当然可以 首先,就RESTful而言,这将是一个PATCH请

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

{"first_name":"Pi","last_name":"Wi"}
插入的人很好,但现在我只想更新姓氏

{"last_name":"Wi"}
问题是,在更新之后,第一个名称是空的,因为表单使用“null”值更新实体(因为它没有给定)。是否可以只更新姓而忽略名?

当然可以

首先,就RESTful而言,这将是一个
PATCH
请求,因此如果您正在使用,则必须在控制器中添加一个
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);

来自文档:“提交()的
方法已被弃用,将在Symfony 3.0“@NDM中删除,您能给出确切的链接吗?我在
submit()
上发现的唯一一件事是>>直接将请求传递给submit()仍然有效,但已被弃用,并将在Symfony 3.0中删除。看,谢谢!但是,它已被弃用;-)然而,你给了我正确的关键字来进行新的谷歌搜索,我在StackOverflow找到了这个。您可以使用HandlerRequest并确保请求方法为
PATCH
。因为大多数浏览器不发送补丁请求,所以可以使用
\u method
覆盖该方法。然后它就可以开箱即用了!:-)我接受你的答案,因为这是两种方法中最好的一种。当你的表单无效(它不处理请求)时,这是因为Symfony表单不处理修补程序方法(仅GET和POST)。解决方法是将
方法
选项设置为
补丁
。阅读本文了解更多信息:在本例中已弃用,仅当您计划在当前项目中继续使用Symfony 3时才适用。我不会为现有的项目做,只为新的项目。。。