錯誤#23254在Symfony 3.3.3中修復。其效果是當原始表單方法不是POST或GET時,實際將隱藏的_method
添加到表單輸入字段。 _method
包含原始表單方法,以便在提交表單時可以恢復它。Symfony 3:http_method_override = true阻止表單驗證
但我有一個包含非POST方法(準確地說setMethod('PUT')
)的子窗體。因此,它將_method
添加到其參數中,_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,在PartnerType
形式不驗證任何更多作爲$request->method()
返回「PUT」由於ParterRoleType
加入_method
場並且PartnerType
表單期待「POST」方法。
我通過配置http_method_override
爲false來保留POST方法,但它破壞了真正使用PUT的窗體。通過這些表單,該方法在網頁中被POST取代,但_method
未被處理以在提交表單時回到真正的PUT。
如果窗體是父窗體的一部分,我預計不會添加_method
輸入字段。這是一個Symfony錯誤還是我錯過了一些東西?