Ich möchte eine neue Zweigfunktion "form_field" definieren, die form_label
, form_widget
und form_errors
rendert. Ich möchte form_row
nicht überschreiben, weil ich das bereits für einen anderen Zweck getan habe: form_row
Wraps <div/>
Container für mein Layout erforderlich. Insbesondere füge ich Bootstrap-Klassen hinzu.Symfony2 benutzerdefinierte Formular-Renderer-Hilfsfunktion
Warum brauche ich das? Normalerweise verwende ich form_row
, aber ich habe viele Formularzeilen, für die ich zwei oder mehr Felder in derselben Zeile platzieren möchte (z. B. "Vorname" und "Nachname"). In diesen Fällen definiere ich mein Wrapping <div/>
manuell, aber ich möchte nicht die drei Funktionsaufrufe (form_label
, form_widget
und form_errors
) jedes Mal schreiben.
Ich habe versucht, eine benutzerdefinierte Funktion anzugeben, aber ich bekomme eine Ausnahme beim Aufruf der Zweigfunktionen dort. Für diese Lösung muss ich wissen, wie Twig-Funktionen von einer benutzerdefinierten Funktion aufgerufen werden.
Mein zweiter Versuch war, Symfonys Lösung für seine eigenen Formhelfer anzupassen. Ich fand diese Linie in Verkäufer/Symfony/Symfony/src/Symfony/Bridge/Zweig/Erweiterung/FormExtension.php:
new \Twig_SimpleFunction('form_widget', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))),
wie eine Funktion Sieht aus, die eigentlich nur einen Block macht. Als ich diese Zeile in meinem AppBundle anpasste, wurde eine Ausnahme ausgelöst, in der Symfony behauptete, dass ein Block namens "form_field" nicht definiert ist. Allerdings definiert ich diesen Block in meiner benutzerdefinierten Formularvorlage:
{% use 'bootstrap_3_horizontal_layout.html.twig' %}
{%- block form_field -%}
{{- form_label(form) -}}
{{- form_widget(form) -}}
{{- form_errors(form) -}}
{%- endblock form_field -%}
Da in Symfony der Form Thematisierung gibt es einige magische hapening, die Lösung kann davon abhängen, wie deine Form aufgebaut ist. Werden Felder für den Vornamen und den Nachnamen dem Formular-Generator als einzelnes, aber zusammengehöriges Feld hinzugefügt? –
Das sind zwei einzelne Felder. Ich würde sie auf diese Weise hinzufügen: '