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?