form_widget form_theme form_label form custom change _self php forms symfony

php - form_theme - Symfony2, ¿cómo hacer una clase de etiqueta de formulario/attr diferente a su entrada?



twig form_label addclass (4)

Me gustaría crear un formulario con etiquetas y entradas, pero la clase de ellos debería ser diferente. El siguiente código crea la etiqueta para la entrada con el mismo atributo:

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 anterior, el ui-spinner-box enviará tanto para la etiqueta como para la entrada. Incluso colocará marcador de posición para su etiqueta.

Entonces, ¿cómo hacer que cree attr para etiqueta por separado para que pueda generar algo como a continuación:

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


Como se menciona en la documentation :

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

Puede establecer esos atributos en la plantilla twig o en el generador de formularios:

Plantilla Twig:

  • para Symfony 2.1 y un uso más nuevo:

    {{ 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 de formularios

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


Esto funciona para mí en Symfony 2.3:

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


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 .


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

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