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'' } }) }}