formularios al limite

Post on 04-Jul-2015

4.435 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

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?

top related