バグ#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()
リターンを検証されていない起因ParterRoleType
によって追加_method
フィールドに「PUT」 PartnerType
フォームでは "POST"メソッドが必要です。
http_method_override
をfalseに設定してPOSTメソッドを保持するように修正しましたが、実際にPUTを使用するフォームが破損していました。これらのフォームでは、メソッドはWebページのPOSTに置き換えられますが、_method
は、フォームの送信時に実際のPUTに戻るために処理されません。
フォームが親フォームの一部である場合、_method
入力フィールドは追加されないことが予想されます。これはSymfonyのバグですか、何か不足していますか?