2017-07-20 7 views
0

バグ#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のバグですか、何か不足していますか?

答えて

0

これは実際にはSymfonyのバグです。子フォームは、そのform_rest()が呼び出されたときに隠された_methodを追加してはなりません。

バージョン2.7.30,2.8.23,3.2.10、および3.3.3からSymfonyが影響を受けます(https://github.com/symfony/symfony/pull/23254を参照)。

patchは、執筆時点で処理中です。

関連する問題