Symfony 3 – Benutzerdefinierte Optionen in Formularen

In Symfony gibt es bekanntlich den sehr mächtigen FormBuilder. Manchmal genügt ein

und wir haben ein Formular für eine Passwortänderung.

Spannend wird es aber natürlich erst, wenn wir unseren eigenen FormType definieren und damit ein komplexeres Formular aufbauen. In diesem Artikel geht es dabei um die Problematik einer benutzerdefinierten Option.

Grundgerüst des eigenen FormType

Für ein eigenes Formular benötigen wir lediglich eine Klasse, die von Symfony\Component\Form\AbstractType erbt und die Methode buildForm() implementiert.

Eigene Optionen hinzufügen

Obiges Formular definiert unabhängig von äußeren Bedingungen ein Formular. So weit so gut. Ab und an benötigen wir aber ein dynamisches Verhalten, dass der Controller festlegen kann.

Wir erweitern unser Formular als mit einer Option.

Der Controller soll also bestimmen können, ob der Betreff bearbeitet werden darf, oder nicht.

Wir erstellen das Formular also mit der entsprechenden Option:

Genau hier wirft uns aber Symfony eine Exception um die Ohren:

The option „disableSubject“ does not exist. Defined options are: …

Standardwert zur Rettung

Das Prinzip hinter der Mechanik an dieser Stelle ist, dass das Formular immer ohne jegliche Optionen verwendet werden kann. Es ist also notwendig, dass alle Optionen eine Standardwert erhalten.

Diesen können wir in der Methode configureOptions() festlegen.

Damit ist diese Option bekannt. Obige Exception würde sie jetzt ebenfalls auflisten, falls wir mal einen Tippfehler machen.

Unser Formular verhält sich jetzt wie wir es erwarten und wir können vom Controller aus diese benutzerdefinierte Option nutzen, oder weglassen und den Standardwert verwenden.