web-dev-qa-db-fra.com

Symfony2, Comment rendre une classe / attr d'étiquette de formulaire différente de son entrée?

Je voudrais construire un formulaire avec une étiquette et des entrées, mais leur classe devrait être différente. Le code ci-dessous crée l'étiquette pour l'entrée avec le même attr:

 public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
                ->add('hours', null ,
                  array('attr'=> 
                             array(
                                 'placeholder'=>'Working Hours',
                                 'class'=>'ui-spinner-box') ) )
    }

Dans mon code au-dessus du ui-spinner-box sera affiché pour l'étiquette et l'entrée. Il mettra même un espace réservé pour son étiquette.

Alors, comment le faire créer attr pour l'étiquette séparément afin que je puisse produire quelque chose comme ci-dessous:

<label class="MYCLASSFOR_LABEL"   for="input_id">Hours</label>
<input class="MYCLASSFOR_INPUTS"  type="text" id="input_id" name="" value="" >
37
PMoubed

Comme mentionné dans la documentation :

  • attr: tableau de valeurs-clés qui sera rendu sous forme d'attributs HTML sur le champ
  • label_attr: tableau de valeurs-clés qui sera rendu sous forme d'attributs HTML sur l'étiquette

Vous pouvez définir ces attributs dans le modèle twig ou dans le générateur de formulaires:

Modèle de brindille:

  • pour symfony 2.1 et une utilisation plus récente:

    {{ form_label(form.hours, null, {'label_attr': {'class': 'foo'}}) }}
    
  • dans l'héritage symfony 2.0, il était

    {{ form_label(form.hours, { 'label_attr': {'class': 'MYCLASSFOR_LABEL'} }) }}
    {{ form_widget(form.hours, { 'attr': {'class': 'MYCLASSFOR_INPUTS'} }) }}
    

Générateur de formulaires

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('hours', null, array(
        'label_attr' => array('class' => 'MYCLASSFOR_LABEL'),
        'attr'       => array('class' => 'MYCLASSFOR_INPUTS'),
    ));
}
89
a.aitboudad

C'est peut-être nouveau, mais il existe un moyen facile de le faire maintenant:

$builder
    ->add('hours', null , array(
        'attr'=> 
            array(
                'placeholder'=>'Working Hours',
                'class'=>'MYCLASSFOR_INPUTS') 
        ) ,
        'label_attr' => array(
            'class' => 'MYCLASSFOR_LABEL'
        )
    );

L'option que vous recherchez est label_attr.

49
Jeremy Warne

Cela fonctionne pour moi dans Symfony 2.3:

{{ form_row(form.hours,  {   'label': 'Hours:'
                            ,'label_attr': {'class': 'MYCLASSFOR_LABEL'}
                            ,'attr': {'class': 'MYCLASSFOR_INPUTS'} 
                        }
           )
}}
7
Onshop

Ce qui précède n'est plus correct, du moins dans le contexte où je l'utilisais. Dans Symfony 2.1, la solution est:

{{ form_label(form.item, label|default(null), { 'label_attr': { 'class': 'MYCLASS' } }) }}
6
ornj