Php Symfony 3:http\u method\u override=true阻止表单验证

Php Symfony 3:http\u method\u override=true阻止表单验证,php,forms,symfony,Php,Forms,Symfony,在Symfony 3.3.3中修复了该错误。它的作用是当原始表单方法不是POST或GET时,将隐藏的\u方法实际添加到表单输入字段中\u方法包含原始表单方法,以便在提交表单时可以恢复该方法 但是我有一个子表单包含一个非POST方法(setMethod('PUT'))。因此,它将\u method添加到其参数中,并且\u method覆盖父表单中的POST方法 由于只有在请求方法与表单方法匹配时才验证表单,因此更改请求方法无法验证父表单 下面是一个精简的示例代码: class PartnerTyp

在Symfony 3.3.3中修复了该错误。它的作用是当原始表单方法不是POST或GET时,将隐藏的
\u方法
实际添加到表单输入字段中<代码>\u方法包含原始表单方法,以便在提交表单时可以恢复该方法

但是我有一个子表单包含一个非POST方法(
setMethod('PUT')
)。因此,它将
\u method
添加到其参数中,并且
\u method
覆盖父表单中的POST方法

由于只有在请求方法与表单方法匹配时才验证表单,因此更改请求方法无法验证父表单

下面是一个精简的示例代码:

class PartnerType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->setMethod('POST')
            ->add('partnerRoles', CollectionType::class, array(
                'entry_type' => PartnerRoleType::class,
            ));
    }
}

class PartnerRoleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->setMethod('PUT')
        ;
    }
}
自从升级到Symfony 3.3.5之后,
parterType
表单不再被验证为
$request->method()
返回“PUT”,因为
\u method
ParterRoleType
添加了
parterType
表单需要一个“POST”方法

我将
http\u method\u override
配置为false以保留POST方法,从而修复了这个问题,但它破坏了真正使用PUT的表单。在这些表单中,该方法被网页中的POST所取代,但在提交表单时,
\u方法
不会被处理以返回真实的PUT


如果表单是父表单的一部分,我希望不添加
\u方法
输入字段。这是一个Symfony bug还是我遗漏了什么?

这实际上是Symfony中的一个bug。调用子窗体的
窗体rest()
时,子窗体不应添加其隐藏的
方法

从2.7.30、2.8.23、3.2.10和3.3.3版开始的Symfony将受到影响(请参阅)

在编写本文时,正在处理一个