php – Symfony 2是否支持部分格式绑定?

前端之家收集整理的这篇文章主要介绍了php – Symfony 2是否支持部分格式绑定?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题:

> Symfony 2是否支持PATCH请求或任何类型的部分表单内容提交?如果是这样,是否有“正确”(或更准确地说,“首选”)的方式呢?
>除了PRE_BIND(见下文)事件方法外,还有其他模式或方法解决这个问题吗?如果还有其他方法解决这个问题,他们中的任何一个比别人更好还是更糟?

到目前为止我已经发现/完成了:根据Github(#5576)的提出要求,已经完成了在Symfony 2中支持部分格式绑定的工作(从我的理解,瞄准Symfony 2.2).但是,我找不到任何文档或示例以外的该拉请求,指示如何使用部分表单绑定.

我找到的一个解决方案可能适合我的目的.该方法是将一个事件订阅者附加到一个表单类型的PRE_BIND事件中,粗略搜索stackoverflow产生了与我目前使用的类似的答案:https://stackoverflow.com/a/11687863/657674.

对于PATCH请求,Symfony 2.3(也许更早?)本地支持部分模型更新.见下面的说明.

对于非PATCH请求(例如PUT和POST),您仍然可以通过创建和注册事件订户来执行部分数据绑定,以将未提交的数据操作为其原始值,或者您可以编写一个自定义请求处理程序来始终调用$form-> submit()方法,$clearMissing设置为false.

使用PATCH请求处理部分绑定

在进一步挖掘Symfony的内部部分之后,更好地了解了事件订阅者和表单扩展,我偶然发现了HttpFoundationRequestHandler类.基本上,作为Symfony 2.3,而不是在绑定表单的提交数据时调用$form-> submit($request),开发人员应该调用$form-> handleRequest($request);这将调用附加的请求处理程序(默认为HttpFoundationRequestHandler).请求处理程序做了一些事情,但最重要的是它如何调用$form-> submit().如果请求方法是PATCH告知该表单不将未提供的表单数据绑定为空值,则它将false值传递到表单的提交方法中.

在Symfony 2.3中使用PATCH方法有一些注意事项,可以通过Symfony的文档进一步解释:

How to use HTTP Methods beyond GET and POST in Routes

“Unfortunately,life isn’t quite this simple,since most browsers do not support sending PUT and DELETE requests. Fortunately Symfony2 provides you with a simple way of working around this limitation. By including a _method parameter in the query string or parameters of an HTTP request,Symfony2 will use this as the method when matching routes.”

Symfony的文档的上述引用说明了大多数浏览器不支持发送PUT,PATCH或DELETE请求.这是一个问题,因为我们利用Symfony对部分表单更新的本机支持,我们需要使用PATCH请求.但是,Symfony提供了一个答案.文档告诉我们,我们可以使用_method参数或表单值来欺骗我们想要的实际请求,而Symfony将会准确地知道我们的意思.对于_method的理解,您可能需要启用http_method_override配置选项,例如:

# config.yml
framework:
    http_method_override: true
    ...

还有其他方式告诉Symfony表格应该使用什么方法,可以在这里找到:Changing the Action and Method of a Form.

猜你在找的PHP相关文章