2012-06-06 9 views
34

Me gustaría crear un formulario con etiquetas y entradas, pero la clase de ellos debería ser diferente. Código de abajo crea la etiqueta para la entrada con el mismo attr:Symfony2, ¿Cómo hacer una clase de etiqueta de formulario/attr diferente a su entrada?

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

En mi código por encima de la ui-spinner-box se emitirán tanto para la etiqueta y de entrada. Incluso colocará marcador de posición para su etiqueta.

Entonces, ¿cómo hacer que crear attr para el sello separado por lo que puede dar salida a algo así como a continuación:

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

Respuesta

81

Como se mencionó en la documentation:

  • attr: Una matriz de clave-valor que se se representarán como atributos HTML en el campo
  • label_attr: Una matriz de clave-valor que se representará como atributos HTML en la etiqueta

Puede establecer los atributos en la plantilla ramita o en forma de constructor: plantilla

Twig:

  • para Symfony 2.1 y uso:

    {{ form_label(form.hours, null, {'label_attr': {'class': 'foo'}}) }} 
    
  • en el legado Symfony 2.0 solía ser

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

constructor Formulario

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

En realidad tiene que ser: '{{form_label (horas, nula, { 'attr': { 'clase': 'MYCLASSFOR_LABEL'}})} } 'porque el segundo parámetro es el nombre de la etiqueta. Si pasa null, seguirá usando el valor establecido en el formulario de compilación – insertusernamehere

+1

Posible, y mucho más fácil, en buildForm - ver mi respuesta –

+4

pequeña actualización de @insertusernameeste comentario, debería ser '{{form_label (hours, null, {' label_attr ': {' clase ':' MYCLASSFOR_LABEL '}})}} ' – Mantas

5

Lo anterior ya no sea correcto, al menos en el contexto lo estaba usando. En Symfony 2.1, la solución es:

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

Esto puede ser nuevo, pero hay una manera fácil de hacer esto ahora:

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

La opción que está buscando es label_attr.

+0

exactamente lo que estaba buscando – targnation

+1

¿Cómo funciona esto para los botones de opción (tipo de elección)? El label_attr solo parece aplicarse a la etiqueta general y no a las etiquetas al lado de cada opción del botón de opción. – Acyra

6

Esto funciona para mí en Symfony 2.3:

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