it-swarm.com.de

Festlegen eines Klassenattributs für eine Symfony2-Formulareingabe

Wie kann ich das HTMLclass-Attribut mithilfe der FormBuilder in <input> auf ein Formular Symfony2 setzen?

Etwas wie das:

->add('birthdate', 'date',array(
      'input' => 'datetime',
      'widget' => 'single_text',
      'attr' => array(
          'class' => 'calendar'
      )
 ))

 {{ form_widget(form.birthdate) }}

Ich möchte dieses inputfield mit dem Attribut class aufcalendar

58

Sie können dies von der Zweigvorlage aus tun:

{{ form_widget(form.birthdate, { 'attr': {'class': 'calendar'} }) }}

Von http://symfony.com/doc/current/book/forms.html#rendering-each-field-by-hand

115
Problematic

Sie können dies mit FormBuilder tun. Fügen Sie dies dem Array in Ihrem FormBuilder hinzu:

'attr'=> array('class'=>'span2')
110
Acyra

Die Antwort von Acyra ist der richtige Weg, wenn Sie Attribute innerhalb des Controllers einstellen möchten, aber viele Ungenauigkeiten aufweisen.

Ja, Sie können dies direkt mit dem FormBuilder tun, indem Sie das attr-Attribut (eingeführt hier für die 2.1-Version und hier für die 2.0 ) für das Array der Optionen wie folgt verwenden:

->add('birthdate', 'date',array(
      'input' => 'datetime',
      'widget' => 'single_text',
      'attr' => array('class'=>'calendar')
 ))

Es stimmt nicht, dass die "Funktionalität nicht funktioniert". Es funktioniert sehr gut!

Es trifft nicht zu, dass Symfony2 das HTML-Attribut class sowohl auf das Label als auch auf die Eingabe anwendet (zumindest ab Version 2.1).

Da das attr-Attribut selbst ein Array ist, können Sie jedes beliebige HTML-Attribut übergeben, das Sie für das Feld darstellen möchten. Dies ist sehr hilfreich, wenn Sie die HTML5-data--Attribute übergeben möchten.

27
JeanValjean
{{ form_widget(form.content, { 'attr': {'class': 'tinyMCE', 'data-theme': 'advanced'} })  }}
4
Kiran

Sie können es in den Optionen Ihrer Formularklasse hinzufügen:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\MyEntity',
        'attr' => array(
            'class' => 'form-horizontal'
        )
    ));
}
4
segli

So was: 

{{ form_widget(form.description, { 'attr': {'class': 'form-control', 'rows': '5', 'style': 'resize:none;'} }) }}

Sie können dies in Twig oder FormClass wie in den obigen Beispielen gezeigt. Möglicherweise möchten Sie jedoch im Controller entscheiden, welche Klasse Ihr Formular erhalten soll. Denken Sie daran, im Allgemeinen nicht viel Logik in der Steuerung zu haben!

    $form = $this->createForm(ContactForm::class, null, [
        'attr' => [
            'class' => 'my_contact_form'
        ]
    ]);
0
Kim

Rendert das HTML-Widget eines bestimmten Felds. Wenn Sie dies auf ein gesamtes Formular oder eine Sammlung von Feldern anwenden, wird jede darunterliegende Formularzeile gerendert.

{# render a field row, but display a label with text "foo" #} {{ form_row(form.name, {'label': 'foo'}) }}

Das zweite Argument für form_row () ist ein Array von Variablen. Die in Symfony bereitgestellten Vorlagen ermöglichen nur das Überschreiben des Labels, wie im obigen Beispiel gezeigt.

Unter "Weitere Informationen zu Formularvariablen" erfahren Sie mehr über das Variablenargument.

0
Javier Morillo