formularios al limite
TRANSCRIPT
formularios al limite
Ignacio Velazquez
@nass600
ignaciovelazquez.es
deSymfony | 2012
quien soy
• Ingeniero Informático de Madrid
• Seguridad IT & Gráficos en
Hannover, Alemania
• PFC con Symfony1 en Chicago, USA
• Programador PHP & Symfony2 @ ideup!
• Maquetador en tiempos libres
root
• Formularios en Symfony2
• Objetos de dominio
• Validación
• Demo 1
• Colecciones prototipadas
• Eventos y Subscriptores
• Demo 2
formularios en Symfony2
root/formularios
• Componente:
– Creación de formularios
– Sincronización de datos (app <-> client)
– Guessing de tipos
– Automatiza la validación de datos
(Componente Validator)
– Creación de la vista
root/formularios/mi-bundle
• Tipos:
– Definen el formulario y los campos
• Handlers:
– Procesan el formulario
• Objetos de dominio (opcional):
– Contienen los datos
• Eventos (opcional):
– Modifican el formulario o sus datos
• Transformadores (opcional):
– Modifican los datos entre la aplicación y el cliente
root/formularios/mi-bundle/estruct
eventos
handlers
objetos de dominio
Tipos + campos
personalizados
root/formularios/creación
root/formularios/procesado
objetos de dominio
root/objetos-de-dominio
• Moldean el objeto para su uso en los
formularios
• Tienen mas o menos campos que la clase
final
• Aíslan la notación de la validación de la
entidad
• Permiten cambiar el tipo a los campos
• No esta acoplado al mapeo de Doctrine
root/objetos-de-dominio/uso/1
• Creamos el objeto de
dominio
• Añadimos las
restricciones
• Preparamos el mapeo de
datos del constructor
root/objetos-de-dominio/uso/2
• Creamos la acción en el controlador
• Pasamos el objeto del modelo al objeto de dominio
para el mapeo de datos en la creación del formulario
• Mandamos la vista del formulario
root/objetos-de-dominio/uso/3
• Creamos el tipo con los
campos del objeto de
dominio
• Asignamos a data_class
el namespace del objeto
de dominio
validación
root/validacion
• Sistema de restricciones de datos
• Principal uso en formularios (también
como servicio)
• Se utiliza en el bind de datos del
formulario
• Se puede implementar de varias maneras
root/validacion/tipos
• Mediante Asserts en campos concretos
(anotaciones, yml…)
• Grupos de validaciones
• Callbacks
• Restricciones personalizadas (Custom
Constraints)
root/validacion/callbacks
• Se pueden usar para validaciones
condicionales
• Pueden intervenir múltiples campos
• Se integran en la Entidad o en el Objeto
de Dominio
root/validacion/callbacks/uso
• Le indicamos al
objeto el callback que
tiene que usar
• Cuando valide
ejecutara el código
para comprobar la
nueva restricción
• Añade el error al
campo que le
indiquemos
root/validacion/restriccion-pers
• Añaden mas restricción al formulario
creando un Constraint nuevo
• Modulable y reusable
root/validacion/restriccion-pers/uso
• Directamente
añadimos la nueva
restricción al campo
• Creamos la
restricción y su
validador
demo 1
colecciones prototipadas
root/colecciones
• Grupo de formularios del mismo tipo
embebidos en otro
• Validado recursivo
• Persistencia automática gracias a Doctrine
(warning!!)
root/colecciones/prototipos
• Permiten añadir o eliminar elementos de
la colección en el formulario
• Ofrecen el prototipo del template de un
elemento de la colección para añadir
nuevos items con javascript
root/colecciones/vista
• Renderizamos toda la colección y el
template del prototipo mediante un Twig
Theme
• Problema con los ids de los elementos de
la colección (_form_field_x_widget)
root/colecciones/prototipos/uso/1
Tipo del formulario
• Añadimos el tipo de los
elementos de la colección
• Habilitamos los atributos
allow_add y allow_delete
root/colecciones/prototipos/uso/2
• Usando un twig
theme creamos un
bloque que se ocupe
tanto del prototipo
como del
renderizado de los
hijos
root/colecciones/prototipos/uso/3
Javascript
• Añadimos los
hooks para añadir y
eliminar elementos
de la colección
• Reemplazamos el
placeholder con un
id numérico
eventos y suscriptores
root/eventos
• Modificación de datos, del formulario o
ejecución de acciones durante el ciclo de
vida de un formulario.
• Eventos al crear el formulario
• Eventos al procesarlo
root/eventos/tipos
• Envío de datos (setData)
– Lanzados en la asignación de datos al
formulario
– Manipulan los datos de aplicación (modelo)
• Recepción de datos (bind)
– Lanzados en la unión de los datos de cliente
(form) y los de aplicación (modelo)
root/eventos/tipos/envio
• PRE_SET_DATA
• SET_DATA
• POST_SET_DATA
root/eventos/tipos/recepcion
• PRE_BIND
• BIND_CLIENT_DATA
• BIND_NORM_DATA
• POST_BIND
root/eventos/suscriptores
• Tipo de Listener
• Previamente le dice al Dispatcher que
eventos va a escuchar
• Abstracción del manejo de eventos de los
formularios
root/eventos/suscriptores/uso/1
• Creamos la clase y
escuchamos en el
evento que
queremos
• Añadimos la lógica
que va a ser lanzada
root/eventos/suscriptores/uso/2
• Añadimos el
suscriptor en el tipo
del formulario
demo 2
preguntas?
gracias
• www.slideshare.net/nass600/formularios-al-limite