clase 11 continuamos con formularios

10

Click here to load reader

Upload: hydrascs

Post on 23-Jun-2015

395 views

Category:

Documents


1 download

DESCRIPTION

www.hydrascs.com

TRANSCRIPT

Page 1: Clase 11   continuamos con formularios

Continuamos con Formularios

Realizada por:Christian Aquino |@cj_aquinoDiego Ramirez |@thedarsideofitGonzalo Alonso |@GonzaloAlonsoDDiego Barros |@Inmzombie

Para: Hydras C&S |@hydras_csBasada en Libro Symfony 2 en español Nacho Pacheco y The Book

Page 2: Clase 11   continuamos con formularios

Primero un repaso

Page 3: Clase 11   continuamos con formularios

Tematizando formularios

Se puede personalizar cómo se reproduce cada parte de un formulario. Se puede cambiar la forma en que se dibuja cada «fila» del formulario, cambiar el formato que sirve para reproducir errores, e incluso personalizar la forma en que se debe reproducir una etiqueta textarea. Nada está fuera de límites, y puedes usar diferentes personalizaciones en diferentes lugares.Symfony utiliza plantillas para reproducir todas y cada una de las partes de un formulario, como las etiquetas label, etiquetas input, mensajes de error y todo lo demás.En Twig, cada «fragmento» del formulario está representado por un bloque Twig. Para personalizar alguna parte de cómo se reproduce un formulario, sólo hay que reemplazar el bloque adecuado.En PHP, cada «fragmento» del formulario se reproduce vía un archivo de plantilla individual. Para personalizar cualquier parte de cómo se reproduce un formulario, sólo hay que reemplazar la plantilla existente creando una nueva.Para entender cómo funciona esto, vamos a personalizar el fragmento form_row añadiendo un atributo «class» al elemento div que envuelve cada fila. Para ello, crea un nuevo archivo de plantilla que almacenará el nuevo marcado:

Page 4: Clase 11   continuamos con formularios

{# 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 %}

Twig

PHP

<!-- src/Acme/TaskBundle/Resources/views/Form/form_row.html.php --><div class="form_row"> <?php echo $view['form']->label($form, $label) ?> <?php echo $view['form']->errors($form) ?> <?php echo $view['form']->widget($form, $parameters) ?></div>

Page 5: Clase 11   continuamos con formularios

El fragmento field_row del formulario se usa cuando al dibujar la mayoría de los campos a través de la función form_row. Para decir al componente Form que utilice tu nuevo fragmento field_row definido anteriormente, añade lo siguiente en la parte superior de la plantilla que dibuja el formulario:

{# 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 ...>

Twig

PHP

<!-- src/Acme/TaskBundle/Resources/views/Default/new.html.php --><?php $view['form']->setTheme($form, array('AcmeTaskBundle:Form')) ?>

<?php $view['form']->setTheme($form, array('AcmeTaskBundle:Form', 'AcmeTaskBundle:Form')) ?>

<form ...>

Page 6: Clase 11   continuamos con formularios

Nombrando fragmentos de formulario

En Symfony, cada parte de un formulario reproducido —elementos HTML de formulario, errores, etiquetas, etc.— se definen en base a un tema, el cual es una colección de bloques en Twig y una colección de archivos de plantilla en PHP.

En Twig, cada bloque necesario se define en un solo archivo de plantilla (form_div_layout.html.twig) que vive dentro de Twig Bridge. Dentro de este archivo, puedes ver todos los bloques necesarios para reproducir un formulario y cada tipo de campo predeterminado./Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twigEn PHP, los fragmentos son archivos de plantilla individuales. De manera predeterminada se encuentran en el directorio Resources/views/Form del paquete de la plataforma (ver en GitHub).El nombre de cada fragmento sigue el mismo patrón básico y se divide en dos partes, separadas por un solo carácter de guión bajo (_). Algunos ejemplos son:

● form_row — usado por form_row para reproducir la mayoría de los campos;● textarea_widget — usado por form_widget para dibujar un campo de tipotextarea;● form_errors — usado por form_errors para dibujar los errores de un campo;

Page 7: Clase 11   continuamos con formularios

label (p. ej. form_label) dibuja la etiqueta de los camposwidget (p. ej. form_widget) dibuja la representación HTML de los camposerrors (p. ej. form_errors) dibuja los errores de los camposrow (p. ej. form_row) dibuja el renglón completo de los campos (etiqueta, elemento

gráfico y errores)

Cada fragmento sigue el mismo patrón básico: type_part. La porción type corresponde al tipo del campo que se está reproduciendo (por ejemplo, textarea, checkbox, date, etc.), mientras que la porción part corresponde a qué se está reproduciendo (por ejemplo, label,widget, errors, etc.). Por omisión, hay cuatro posibles partes de un formulario que puedes pintar:

Page 8: Clase 11   continuamos con formularios

Heredando fragmentos de plantilla

En algunos casos, parece que falta el fragmento que deseas personalizar. Por ejemplo, no hay fragmento textarea_errors en los temas predeterminados provistos con Symfony. Entonces, ¿cómo se reproducen los errores de un campo textarea?La respuesta es: a través del fragmento field_errors. Cuando Symfony pinta los errores del tipo textarea, primero busca un fragmento textarea_errors antes de caer de nuevo al fragmento form_errors. Cada tipo de campo tiene un tipo padre (el tipo primario del textarea es text, y su padre es el form), y Symfony utiliza el fragmento para el tipo del padre si no existe el fragmento base.Por lo tanto, para sustituir sólo los errores de los campos textarea, copia el fragmento form_errors, renómbralo como textarea_errors y personalízalo. Para sustituir la reproducción predeterminada para error de todos los campos, copia y personaliza el fragmento form_errors directamente.

Page 9: Clase 11   continuamos con formularios

Tematizando formularios globalmente

En el ejemplo anterior, utilizamos el ayudante form_theme (en Twig) para «importar» fragmentos de formulario personalizados sólo para ese formulario. También puedes decirle a Symfony que importe formularios personalizados a través de tu proyecto.

Twig

Para incluir automáticamente en todas las plantillas los bloques personalizados de la plantilla fields.html.twig creada anteriormente, modifica el archivo de configuración de tu aplicación:

# app/config/config.ymltwig: form: resources: - 'AcmeTaskBundle:Form:fields.html.twig' # ...

Page 10: Clase 11   continuamos con formularios

Para incluir automáticamente todas las plantillas personalizadas del directorio Acme/TaskBundle/Resources/views/Form creado anteriormente, modifica el archivo de configuración de tu aplicación:

# app/config/config.ymlframework: templating: form: resources: - 'AcmeTaskBundle:Form'# ...