2017-07-20 4 views
0

Fehler #23254 wurde in Symfony 3.3.3 behoben. Sein Effekt ist, die versteckten _method zu den Formular-Eingabefeldern hinzuzufügen, wenn die ursprüngliche Formularmethode nicht POST oder GET ist. _method enthält die ursprüngliche Formularmethode, so dass sie beim Übergeben des Formulars wiederhergestellt werden kann.Symfony 3: http_method_override = true verhindert Formularüberprüfung

Aber ich habe ein Unterformular, das eine nicht POST-Methode enthält (setMethod('PUT') um genau zu sein). Daher fügt er _method zu seinen Parametern hinzu, und _method überschreibt die POST-Methode von der übergeordneten Form.

Da ein Formular nur validiert wird, wenn die Anforderungsmethode mit der form -Methode übereinstimmt, kann das übergeordnete Formular nicht geändert werden, wenn die Anforderungsmethode geändert wird.

Hier ein abgespeckte Beispielcode:

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') 
     ; 
    } 
} 

Da 3.3.5 bis Symfony aktualisieren, die PartnerType Form wird noch mehr als $request->method() returns „PUT“ aufgrund des durch ParterRoleType_method hinzugefügt Feld nicht validiert und das Formular PartnerType erwartet eine "POST" -Methode.

Ich reparierte es, indem ich http_method_override auf falsch konfigurierte, um die POST-Methode beizubehalten, aber es bricht Formen, die wirklich PUT verwenden. Bei diesen Formularen wird die Methode in der Webseite durch POST ersetzt, aber _method wird nicht verarbeitet, um zum tatsächlichen PUT zurückzukehren, wenn das Formular abgeschickt wird.

Ich würde erwarten, dass das _method Eingabefeld nicht hinzugefügt wird, wenn das Formular Teil eines übergeordneten Formulars ist. Ist das ein Symfony Bug oder fehlt mir etwas?

Antwort

0

Dies ist eigentlich ein Fehler in Symfony. Ein untergeordnetes Formular sollte nie seine versteckte _method hinzufügen, wenn es form_rest() aufgerufen wird.

Betroffen sind Symfony ab den Versionen 2.7.30, 2.8.23, 3.2.10 und 3.3.3 (siehe https://github.com/symfony/symfony/pull/23254).

Eine patch wird zum Zeitpunkt des Schreibens bearbeitet.