Formulare

Eine kurze Liste meiner ehemaligen Stoplersteine mit „bitter sweet“ Symfony’s Formular Generator.


First Strike: Twitter Bootstrap
Wer gerne das CSS Framework Twitter Bootstrap verwendet bitte nicht vergessen das Symfony das out of the Box unterstützt.
Dazu lege ich mir die komplette Vererbungshierachie der Vorlagen im „app/Resources/views/“ an. Insgesamt sind das bei mir die 3 Standard Vorlagen die ich mir aus den Symfony Repos ziehe und darin ablege:

  • bootstrap_3_horizontal_layout.html.twig
  • bootstrap_3_layout.html.twig
  • form_div_layout.html.twig (Achtung: Die DIV Variante wird hier verwendet)

Dann noch die Vererbung  in den 2 Vorlagen (bootstrap_3_horizontal_layout.html.twig und bootstrap_3_layout.html.twig) richtig setzen:

  • {% extends „::bootstrap_3_layout.html.twig“ %}
    in der bootstrap_3_horizontal_layout.html.twig Vorlage
  • {% extends „::form_div_layout.html.twig“ %}
    in der bootstrap_3_layout.html.twig Vorlage

So Twig will auch noch was wissen:

twig:
    form_themes:
        - '::bootstrap_3_horizontal_layout.html.twig'

Dann sollte man mal ein Formular anlegen und ausprobieren. Individuelle Änderungen dann bequem in den 3 Dateien einbauen.


Second Strike: Formulare ausgeben
Wer gerne mit „form_start“, „form_row“ und „form_end“ arbeitet wird auch mal die ein oder andere Überraschung erleben. „Warum werden immer alle Elemente ausgegeben obwohl ich nur bestimmte angebe?“ oder wer mit den CSRF Tokens arbeitet wird das auch gleich mal vermissen wenn’s dann doch mit den Elementen klappt.

  1. Nur bestimmte Formularelemente mit form_row ausgeben klappt in diesem Fall ganz gut wenn man bei „form_end“ noch folgendes angibt: „form_end( form, { ‚render_rest‘: false } )“.
    Dann ruft der Form Generator nicht automatisch „form_rest“ auf und nimmt nur die Definierten.
  2. Fortsetzung Punkt 1: Mann muss dann alle Elemente angeben. Auch das Token will erwähnt sein! Also:
    „form_row( form._token  )“ und dann funkts.

Im Gesamten könnts dann so aussehen:

{{ form_start(form) }}
    {{ form_errors(form) }}
    {{ form_row(form.task) }}
    {{ form_row(form.dueDate) }}
    {{ form_row( form._token ) }}
    {{ form_row( form.submit ) }}
{{ form_end(form, { 'render_rest': false } ) }}

 

Links zum Thema:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.