Tematizando formularios
Cada parte de cómo se representa una forma puede ser personalizado . Puede cambiar la forma en que se representa cada "fila" de formulario, cambiar el marcado usado para representar errores o incluso personalizar cómo se debe representar una etiqueta de texto. No hay nada prohibido, y se pueden usar diferentes personalizaciones en diferentes lugares.
Symfony utiliza plantillas para representar todas y cada una de las partes de un formulario, como etiquetas de etiquetas, etiquetas de entrada, mensajes de error y todo lo demás.
En Twig, cada forma de "fragmento" está representada por un bloque Twig.Para personalizar cualquier parte de cómo se renderiza un formulario, solo debe sobrescribir el bloque apropiado.
En PHP, cada forma de "fragmento" se representa a través de un archivo de plantilla individual. Para personalizar cualquier parte de cómo se renderiza un formulario, solo tiene que anular la plantilla existente creando una nueva.
Para comprender cómo funciona esto, personalice el fragmento form_row y agregue un atributo de clase al elemento div que rodea cada fila. Para ello, cree un nuevo archivo de plantilla que almacenará el nuevo marcado:
{# src/Acme/TaskBundle/Resources/views/Form/fields.html.twig #}
{% block form_row %}
{% spaceless %}
<div class="form_row">
{{ form_label(form) }}
{{ form_errors(form) }}
{{ form_widget(form) }}
</div>
{% endspaceless %}
{% endblock form_row %}
La forma fragmento form_row se utiliza cuando se representa la mayoría de los campos a través de la función form_row. A decir el componente de forma de utilizar el nuevo fragmento form_row definido anteriormente, añadir lo siguiente a la parte superior de la plantilla que la muestra la forma:
{# src/Acme/TaskBundle/Resources/views/Default/new.html.twig #}
{% form_theme form 'AcmeTaskBundle:Form:fields.html.twig' %}
{% form_theme form 'AcmeTaskBundle:Form:fields.html.twig'
'AcmeTaskBundle:Form:fields2.html.twig' %}
{{ form(form) }}
La etiqueta form_theme (en Twig) "importación" los fragmentos se define en la plantilla dada y los utiliza al procesar el formulario. En otras palabras, cuando se llama a la función form_row más adelante en esta plantilla, usará el bloque form_row de su tema personalizado (en lugar del bloque form_row predeterminado que viene con Symfony).
Su tema personalizado no tiene que anular todos los bloques. Al renderizar un bloque que no se reemplaza en su tema personalizado, el motor de temas volverá al tema global (definido en el nivel de paquete).
Si se proporcionan varios temas personalizados, se buscarán en el orden indicado antes de volver al tema global.
Para personalizar cualquier parte de un formulario, solo tiene que anular el fragmento apropiado. Saber exactamente qué bloque o archivo sobrescribir es el tema de la siguiente sección.
{# src/Acme/TaskBundle/Resources/views/Default/new.html.twig #}
{% form_theme form with 'AcmeTaskBundle:Form:fields.html.twig' %}
{% form_theme form with ['AcmeTaskBundle:Form:fields.html.twig',
'AcmeTaskBundle:Form:fields2.html.twig'] %}
Para más información ver la Cómo personalizar la representación en Symfony libro de cocina
Global Tematizando formularios
En el ejemplo anterior, se utilizó el form_theme ayudante (en Twig) para "importar" los fragmentos de formulario personalizados en solo th en la forma. También puede indicarle a Symfony que importe las personalizaciones de formularios en todo su proyecto.
ramita
para incluir automáticamente los bloques personalizados de la plantilla fields.html.twig creado anteriormente en todas las plantillas, modifique el archivo de configuración de la aplicación:
# app/config/config.yml
twig:
form:
resources:
- 'AcmeTaskBundle:Form:fields.html.twig'
Cualquier bloques dentro de los campos. La plantilla html.twig ahora se usa globalmente para definir el resultado del formulario.
Gracias, este también está bien. Absolutamente no noté esta parte en el libro de cocina. :) Pero todavía tengo que construir filas para cada elemento en los campos twig. Pero tal vez esto es así, cómo debe ser. – insertusernamehere
@insertusernameheredad de personalización agregada del campo en mi respuesta. No probado, pero debería funcionar. –
Funciona muy bien. Gracias de nuevo. :) – insertusernamehere