67 votes

Comment définir un attribut de classe pour une entrée de formulaire Symfony2 ?

Comment puis-je définir le HTML class à un formulaire <input> en utilisant le FormBuilder en Symfony2 ?

Quelque chose comme ça :

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

 {{ form_widget(form.birthdate) }}

Je veux ceci input avec l'attribut class réglé sur calendrier

121voto

Problematic Points 10229

Vous pouvez le faire à partir du modèle de brindille :

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

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

50 votes

Ce n'est pas vraiment une réponse à la question - le but du FormBuilder est d'éviter de coder manuellement le modèle Twig.

26 votes

@Acyra Cela dépend... jeter des tas de choses liées à la vue dans le constructeur de formulaires n'est pas non plus la meilleure solution.

6 votes

Je suis d'accord, la personnalisation du formulaire doit se faire dans la vue, et non dans le contrôleur. Les contrôleurs devraient être aussi légers que possible. Bien que Symfony2 crée les formulaires pour vous, ce qui est un énorme gain de temps, lorsque vous travaillez avec des interfaces utilisateur "fantaisistes", le constructeur de formulaires peut parfois vous gêner.

116voto

Acyra Points 2733

Vous pouvez le faire avec FormBuilder. Ajoutez ceci au tableau de votre FormBuilder :

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

10 votes

Cela ajoute la classe à la div d'habillage et non à l'entrée.

30voto

JeanValjean Points 3518

La réponse d'Acyra est la bonne si vous voulez définir des attributs dans le contrôleur, mais elle comporte de nombreuses inexactitudes.

Oui, vous pouvez le faire directement avec le FormBuilder en utilisant la fonction attr (introduit aquí pour la version 2.1 et ici pour la 2.0 ) au tableau des options comme suit :

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

Il n'est pas vrai que la "fonctionnalité est cassée". Elle fonctionne très bien !

Il n'est pas vrai que Symfony2 applique le HTML class à la fois à l'étiquette et à l'entrée (au moins à partir de la version 2.1).

En outre, étant donné que le attr est lui-même un tableau, vous pouvez passer n'importe quel attribut HTML que vous souhaitez rendre pour le champ. C'est très utile si vous voulez passer l'attribut HTML5 data- attributs.

10voto

segli Points 71

Vous pouvez l'ajouter dans les options de votre classe de formulaire :

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

4voto

Kiran Points 193
{{ form_widget(form.content, { 'attr': {'class': 'tinyMCE', 'data-theme': 'advanced'} })  }}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X