Php Symfony 2是否支持部分表单绑定?
我的问题:Php Symfony 2是否支持部分表单绑定?,php,forms,symfony,patch,partial,Php,Forms,Symfony,Patch,Partial,我的问题: Symfony 2是否支持补丁请求或任何类型的部分表单内容提交?如果是这样,是否有一种“正确”(或者更准确地说是“首选”)的方法来做到这一点 除了PRE_BIND(见下文)事件方法外,还有其他模式或方法可以解决此问题吗?如果有其他方法来解决这个问题,其中有哪一种被认为比其他方法更好,还是更糟糕 到目前为止我发现/完成的工作:根据Github()上的一个pull请求,在Symfony 2中已经完成了支持部分表单绑定的工作(据我所知,目标是Symfony 2.2)。但是,我找不到该请求之
补丁
请求或任何类型的部分表单内容提交?如果是这样,是否有一种“正确”(或者更准确地说是“首选”)的方法来做到这一点PRE_BIND
(见下文)事件方法外,还有其他模式或方法可以解决此问题吗?如果有其他方法来解决这个问题,其中有哪一种被认为比其他方法更好,还是更糟糕我找到的一个解决方案可能适合我的目的。这种方法是将事件订阅者附加到
PRE_BIND
事件中,对于表单类型,粗略搜索stackoverflow会得到以下答案,这与我目前使用的答案类似:.对于补丁
请求,Symfony 2.3(可能更早?)本机支持部分模型更新。见下面的解释
对于非PATCH
请求(例如PUT
和POST
),您仍然可以通过创建和注册事件订阅者来执行部分数据绑定,以将未提交的数据处理为其原始值,或者您可以编写自定义请求处理程序来始终调用$form->submit()$clearMissing
设置为false
的方法
使用补丁
请求处理部分绑定
在深入了解Symfony的内部结构并更好地理解事件订阅者和表单扩展之后,我偶然发现了HttpFoundationRequestHandler
类。基本上,从Symfony 2.3开始,在绑定表单提交的数据时,开发者应该调用$form->handleRequest($request)
,而不是调用$form->submit($request)
;这将调用附加的请求处理程序(默认情况下HttpFoundationRequestHandler
)。请求处理程序做了一些事情,但最重要的是它如何调用$form->submit()
。如果请求方法是PATCH
告诉表单不要将未应用的表单数据绑定为null
值,则它将false
值传递到表单的submit
方法中
使用Symfony 2.3中的补丁
方法时有一些注意事项,可通过Symfony的文档进一步解释:
:
“不幸的是,生活并非如此简单,因为大多数浏览器不支持发送PUT和DELETE请求。幸运的是,Symfony2为您提供了一种解决此限制的简单方法。通过在查询字符串或HTTP请求的参数中包含_方法参数,Symfony2将在匹配路由时使用此方法。”
上述引用自Symfony的文档,说明大多数浏览器不支持发送PUT
、PATCH
或DELETE
请求。这是一个问题,因为要利用Symfony对部分表单更新的本机支持,我们需要使用补丁
请求。然而,Symfony提供了一个答案。文档告诉我们,我们可以使用\u方法
参数或表单值来欺骗我们想要的实际请求,Symfony将确切知道我们的意思。但是,为了理解\u方法
,您可能必须启用http\u方法\u覆盖
配置选项,例如:
# config.yml
framework:
http_method_override: true
...
还有其他方法可以告诉Symfony表单应该使用什么方法,可以在这里找到: