php - form_theme - Cómo establecer un atributo de clase en una entrada de formulario Symfony2
symfony form change label (7)
¿Cómo puedo establecer el atributo de class
HTML
en un formulario <input>
usando FormBuilder
en Symfony2
?
Algo como esto:
->add(''birthdate'', ''date'',array(
''input'' => ''datetime'',
''widget'' => ''single_text'',
''attr'' => array(
''class'' => ''calendar''
)
))
{{ form_widget(form.birthdate) }}
Quiero este campo de input
con la class
atributo establecida en calendario
La respuesta de Acyra conduce correctamente si desea establecer atributos dentro del controlador, pero tiene muchas imprecisiones.
Sí, puede hacerlo directamente con FormBuilder utilizando el atributo attr
(introducido here para la versión 2.1 y aquí para el 2.0 ) para la matriz de opciones de la siguiente manera:
->add(''birthdate'', ''date'',array(
''input'' => ''datetime'',
''widget'' => ''single_text'',
''attr'' => array(''class''=>''calendar'')
))
No es cierto que la "funcionalidad está rota". ¡Funciona muy bien!
No es cierto que Symfony2 aplique el atributo de class
HTML a la etiqueta y a la entrada (al menos desde la versión 2.1).
Además, dado que el atributo attr
es una matriz en sí misma, puede pasar cualquier atributo HTML que desee representar para el campo. Es muy útil si quiere pasar los atributos de data-
HTML5.
Me gusta esto:
{{ form_widget(form.description, { ''attr'': {''class'': ''form-control'', ''rows'': ''5'', ''style'': ''resize:none;''} }) }}
Puede agregarlo en las opciones de su clase de formulario:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
''data_class'' => ''AppBundle/Entity/MyEntity'',
''attr'' => array(
''class'' => ''form-horizontal''
)
));
}
Puedes hacer esto desde la plantilla twig:
{{ form_widget(form.birthdate, { ''attr'': {''class'': ''calendar''} }) }}
Desde http://symfony.com/doc/current/book/forms.html#rendering-each-field-by-hand
Puedes hacerlo con FormBuilder. Agregue esto a la matriz en su FormBuilder:
''attr''=> array(''class''=>''span2'')
Representa el widget HTML de un campo determinado. Si aplica esto a un formulario completo o conjunto de campos, se representará cada fila de formulario subyacente.
{# render a field row, but display a label with text "foo" #} {{ form_row(form.name, {''label'': ''foo''}) }}
El segundo argumento para form_row () es una matriz de variables. Las plantillas proporcionadas en Symfony solo permiten anular la etiqueta como se muestra en el ejemplo anterior.
Consulte "Más sobre las variables de formato" para obtener más información sobre el argumento de variables.
{{ form_widget(form.content, { ''attr'': {''class'': ''tinyMCE'', ''data-theme'': ''advanced''} }) }}