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)。但是,我找不到该请求之

我的问题:

  • Symfony 2是否支持
    补丁
    请求或任何类型的部分表单内容提交?如果是这样,是否有一种“正确”(或者更准确地说是“首选”)的方法来做到这一点

  • 除了
    PRE_BIND
    (见下文)事件方法外,还有其他模式或方法可以解决此问题吗?如果有其他方法来解决这个问题,其中有哪一种被认为比其他方法更好,还是更糟糕

  • 到目前为止我发现/完成的工作:根据Github()上的一个pull请求,在Symfony 2中已经完成了支持部分表单绑定的工作(据我所知,目标是Symfony 2.2)。但是,我找不到该请求之外的任何说明如何使用部分表单绑定的文档或示例


    我找到的一个解决方案可能适合我的目的。这种方法是将事件订阅者附加到
    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表单应该使用什么方法,可以在这里找到: