2016-05-02 11 views
2

Verwendung zu bilden:Symfony Form wie Klasse hinzufügen Gruppe

->add('name', TextType::class, [ 
       'label' => 'Name', 
       'required' => true, 
       'attr' => [ 
        'class' => 'myclass' 
       ], 
      ]) 

Ich füge die Klasse "myclass" zum <input> Element, bekommen:

<div class="form-group"> 
    <label ...>Name</label> 
    <input type="text" required="required" class="myclass" ...> 
</div> 

Was passiert, wenn ich hinzufügen wollte die „myclass“ Klasse nicht an den Eingang selbst, sondern auf seine <div class="form-group"> Behälter, um zu erhalten:

<div class="form-group myclass"> 
    <label ...>Name</label> 
    <input type="text" required="required" ...> 
</div> 

Was ist der beste Weg, dies zu erreichen?

+0

Sie müssen die verwendete Vorlage überschreiben (https://symfony.com/doc/current/cookbook/form/form_customization.html#form-theming). Keine Möglichkeit, das auf der * php-Seite * zu tun. – Yoshi

Antwort

2

In meinem Fall musste ich den form_row Block außer Kraft zu setzen:

{% block form_row -%} 
    <div class="form-group myclass{% if (not compound or force_error|default(false)) and not valid %} has-error{% endif %}"> 
     {{- form_label(form) -}} 
     {{- form_widget(form) -}} 
     {{- form_errors(form) -}} 
    </div> 
{%- endblock form_row %} 

wie vorgeschlagen, die docs hilft zu verstehen, warum.

1

Wie @Yoshi wies darauf hin, in der Formulardefinition selbst Sie nicht können div Klassen in den Behälter hinzufügen.

Der richtige Weg zum Anpassen des Formular-Renderings ist das Überschreiben des Basisblocks über Twig, wie hier erklärt: http://symfony.com/doc/current/cookbook/form/form_customization.html#how-to-customize-an-individual-field (Übrigens schlage ich vor, dass Sie den ganzen Artikel sorgfältig lesen, um alles über Anpassungen zu wissen).

Im überschriebenen Block haben Sie auch die widget Daten, wenn Sie möchten, z. eine Klasse mit der Feld-ID hinzuzufügen:

{% block _product_name_widget %} 
    <div class="text_widget {{ id }}"> 
     {{ block('form_widget_simple') }} 
    </div> 
{% endblock %} 

in diesem Beispiel oben wird {{ id }} mit der Widget (Feld)-ID ersetzt werden.

Verwandte Themen