Formularios al limite

4,901 views
4,754 views

Published on

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,901
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
130
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Formularios al limite

  1. 1. formularios al limiteIgnacio Velazquez@nass600ignaciovelazquez.es deSymfony | 2012
  2. 2. 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
  3. 3. root• Formularios en Symfony2• Objetos de dominio• Validación• Demo 1• Colecciones prototipadas• Eventos y Subscriptores• Demo 2
  4. 4. formularios en Symfony2
  5. 5. 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
  6. 6. 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
  7. 7. root/formularios/mi-bundle/estruct eventos handlersobjetos de dominio Tipos + campos personalizados
  8. 8. root/formularios/creación
  9. 9. root/formularios/procesado
  10. 10. objetos de dominio
  11. 11. 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
  12. 12. root/objetos-de-dominio/uso/1• Creamos el objeto de dominio• Añadimos las restricciones• Preparamos el mapeo de datos del constructor
  13. 13. 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
  14. 14. 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
  15. 15. validación
  16. 16. 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
  17. 17. root/validacion/tipos• Mediante Asserts en campos concretos (anotaciones, yml…)• Grupos de validaciones• Callbacks• Restricciones personalizadas (Custom Constraints)
  18. 18. 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
  19. 19. 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
  20. 20. root/validacion/restriccion-pers• Añaden mas restricción al formulario creando un Constraint nuevo• Modulable y reusable
  21. 21. root/validacion/restriccion-pers/uso• Directamente añadimos la nueva restricción al campo• Creamos la restricción y su validador
  22. 22. demo 1
  23. 23. colecciones prototipadas
  24. 24. root/colecciones• Grupo de formularios del mismo tipo embebidos en otro• Validado recursivo• Persistencia automática gracias a Doctrine (warning!!)
  25. 25. 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
  26. 26. 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)
  27. 27. 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
  28. 28. root/colecciones/prototipos/uso/2• Usando un twig theme creamos un bloque que se ocupe tanto del prototipo como del renderizado de los hijos
  29. 29. 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
  30. 30. eventos y suscriptores
  31. 31. 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
  32. 32. 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)
  33. 33. root/eventos/tipos/envio• PRE_SET_DATA• SET_DATA• POST_SET_DATA
  34. 34. root/eventos/tipos/recepcion• PRE_BIND• BIND_CLIENT_DATA• BIND_NORM_DATA• POST_BIND
  35. 35. 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
  36. 36. 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
  37. 37. root/eventos/suscriptores/uso/2• Añadimos el suscriptor en el tipo del formulario
  38. 38. demo 2
  39. 39. preguntas?
  40. 40. gracias• www.slideshare.net/nass600/formularios-al-limite

×