Symfony parte 6

  • 1,061 views
Uploaded on

Estudios de códigos de Symfony. Modelo de Datos, controlador y comenzando la revisión de formularios.

Estudios de códigos de Symfony. Modelo de Datos, controlador y comenzando la revisión de formularios.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,061
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
3
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • El nombre único es imprescindible para relacionar objetos entre sí, sin tener que definir claves primarías (que normalmente son valores que se auto-incrementan y por tanto, no se pueden establecer)
  • El sf_content imprime el contenido generado por las acciones.
  • Podríamos tener un config a nivel de proyecto, aplicaciones y modulos.
  • En el código de la plantilla anterior, se emplea una sentencia foreach para recorrer la lista de objetos de tipo encuesta (almacenados en la variable $encuesta_list) y para cada oferta de trabajo, se muestra el valor de todas sus columnas. Para acceder al valor de cada columna, puedes utilizar un método generado automáticamente y que se construye uniendo la palabra get junto con el nombre de la columna en formato camelCase.
  • Métodos de accesos públicos, puedo en las clases de las acciones crear métodos de accesos privados, pero recuerden que provienen de una petición.
  • Métodos de accesos públicos, puedo en las clases de las acciones crear métodos de accesos privados, pero recuerden que provienen de una petición.
  • Métodos de accesos públicos, puedo en las clases de las acciones crear métodos de accesos privados, pero recuerden que provienen de una petición.
  • Métodos de accesos públicos, puedo en las clases de las acciones crear métodos de accesos privados, pero recuerden que provienen de una petición.
  • Cuando accedes a la portada de, la URL es /encuesta, por lo que la primera ruta cuyo patrón coincide con la URL es default_index. En los patrones, cuando una palabra empieza por dos puntos (:) se considera que es una variable, por lo que el patrón /:module significa: cualquier URL que sea una barra / seguida de cualquier contenido. En este ejemplo, la variable module tendrá como valor la palabra encuesta. Después, este valor se puede obtener en la acción mediante $request->getParameter('module'). La ruta default_index también define un valor por defecto para la variable llamada action. Por tanto, cuando una URL cumple con el patrón de esta ruta, a la petición se le añade un parámetro llamado action que vale index. Si ahora accedes a la página /job/show/id/1, Symfony detecta que el patrón que se cumple es el de la última ruta /:module/:action/*. En los patrones, un asterisco (*) es equivalente a una sucesión de pares clave/valor separados por barras (/). Por tanto, la URL /job/show/id/1 se intepreta de la siguiente forma:

Transcript

  • 1. Symfony Parte 5 Rodrigo Miranda [email_address] [email_address] http://www.rodrigomiranda.cl
  • 2. Rodrigo Miranda Blog: www.rodrigomiranda.cl Crear Módulos de la Aplicación
  • 3. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Crear Módulos en aplicación Administrador:
    • Vamos a generar algunos módulos de la aplicación administrador. Para comenzar, vamos a construir dos: encuesta y grupo-pregunta.
    • Nos interesa generar el CRUD de cada uno de ellos; que es el acrónimo de las palabras inglesas “Creation/Retrieval/Update/Deletion (Crear, Obtener, Actualizar y Borrar).
  • 4. Rodrigo Miranda Blog: www.rodrigomiranda.cl Módulos en aplicación Administrador
    • Podríamos ocupar los siguientes comandos que ya conocemos.
    • Los cuales generan módulos llamados encuesta y grupo-pregunta en la aplicación administrador, basados en los modelos Encuesta y GrupoPregunta encontrados en el directorio lib/model del proyecto.
    #./symfony propel:generate-module administrador encuesta Encuesta #./symfony propel:generate-module administrador grupo-pregunta GrupoPregunta
  • 5. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Podemos agregar las siguientes opciones a ese comando .
    • --with-show: Permite generar una acción y una plantilla específicas para visualizar los datos de un objeto. Esta plantilla solamente permite visualizar los datos, no modificarlos.
    • --non-atomic-actions: Dado que el flujo de trabajo de los formulario de este módulo se controla mediante métodos create , edit y update . Podríamos crear un único método que se encargue de estas funcionalidades
    Módulos en aplicación Administrador
  • 6. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Probamos los módulos en las sgtes URLs:
    • http://encuesta.localhost/administrador_dev.php/encuesta
    • http://encuesta.localhost/administrador_dev.php/grupopregunta
    • Nota: Los problemas que puedes encontrar ya estás en condiciones de solucionarlos.
    Módulos en aplicación Administrador
  • 7. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Si intentas agregar una nueva encuesta verás que Symfony muestra una excepción, ya que no se ha indicado una representación en forma de texto de los objetos referenciados.
    • Para solventarlo utiliza el método mágico __toString. En las clases que indica Symfony ( TipoEncuesta y Organizacion ) que se encuentran en lib/model .
    Módulos en aplicación Administrador
  • 8. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Si intentamos guardar una nueva encuesta el formulario nos indica que existen campos requeridos que debo llenar. En los campos textos puedo colocar algo de información, pero no puedo hacer lo mismo en los campos tipo Select. Es necesario al parecer tener datos iniciales en el sistema.
    Módulos en aplicación Administrador
  • 9. Rodrigo Miranda Blog: www.rodrigomiranda.cl Datos Iniciales, Prueba y de Usuarios
  • 10. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Aunque hemos creado una estructura de base de datos básica, todas sus tablas están vacías. En cualquier aplicación web siempren existen tres tipos de datos, por lo tanto comenzaremos a solucionarlo.
    Módulos en aplicación Administrador
  • 11. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Datos iniciales: Son datos que necesita la aplicación para funcionar. Para este caso, necesitamos nombres de algunas categorías y tipos que son fk en otras tablas.
    • Datos de pruebas: Son los datos para probar la aplicación. Los buenos programadores crean pruebas unitarias para asegurar que la aplicación se comporta tal y como se describe en los escenarios. La mejor forma de probar la aplicación consiste en realizar pruebas unitarias automáticas.
    • Datos de usuarios: Son los datos reales creados por lo usuarios que utilizan la aplicación.
    Módulos en aplicación Administrador
  • 12. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Cuando realizas el proceso de construir a mano el schema.yml y posteriormente desde él generar la estructura de la base de datos, debes considerar que symfony al generar las tablas elimina toda la información en ellas. Sin embargo, como nosotros generamos el schema desde la estructura de la base de datos ya creada, realizando el proceso inverso, no nos preocuparemos ;-) .
    Módulos en aplicación Administrador
  • 13. Rodrigo Miranda Blog: www.rodrigomiranda.cl YAML
  • 14. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • YAML:
    • Formato para serializar datos que es fácil de leer por las personas, computadores o máquinas y es compatible con todos los lenguajes de programación .
  • 15. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Nos permite describir los datos como en XML, pero con una sintaxis mucho más sencilla. Es útil para describir datos que pueden ser transformados en arrays simples y asociativos .
  • 16. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • YAML utiliza la tabulación para indicar su estructura, los elementos que forman una secuencia utilizan un guión medio y los pares clave/valor de los array asociativos se separan con dos puntos.
  • 17. Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 18. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • YAML además nos provee de una notación abreviada. Los arreglos simples se definen con [ ] y los arreglos asociativos con { } .
  • 19. Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 20. Rodrigo Miranda Blog: www.rodrigomiranda.cl Sintaxis:
  • 21. Rodrigo Miranda Blog: www.rodrigomiranda.cl Arreglos Simples :
  • 22. Rodrigo Miranda Blog: www.rodrigomiranda.cl Arreglos Asociativos :
  • 23. Rodrigo Miranda Blog: www.rodrigomiranda.cl Crear algunos Datos Iniciales
  • 24. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Crearemos archivos formato YAML y los guardaremos en el directorio data/fixture .
  • 25. Rodrigo Miranda Blog: www.rodrigomiranda.cl Organizacion:  Modelo primer_elemento:  Etiqueta nombre único etiqueta: Poodu  Columna a llenar segundo_elemento: etiqueta: Conicyt tercer_elemento: etiqueta: Google data/fixtures/010_organizacion.yml
  • 26. Rodrigo Miranda Blog: www.rodrigomiranda.cl TipoEncuesta: primer_elemento: etiqueta: Pregunta por Pregunta segundo_elemento: etiqueta: Sección por Sección tercer_elemento: etiqueta: Todos en Uno data/fixtures/020_tipoencuesta.yml
  • 27. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Cuando una cadena de texto contiene saltos de línea se utiliza el símbolo | para indicar que la cadena de texto ocupa varias líneas.
  • 28. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • El prefijo numérico de cada archivo es opcional, lo que buscamos es controlar el orden en el que se cargan los datos. Y además, por si más adelante creamos archivos que se deben cargar entre medio de dos ya existente .
  • 29. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Una vez creados los archivos de datos ejecutamos:
    #./symfony propel:data-load
  • 30. Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 31. Rodrigo Miranda Blog: www.rodrigomiranda.cl Arquitectura MVC
  • 32. Rodrigo Miranda Blog: www.rodrigomiranda.cl Antes:
  • 33. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Organiza el código en base a su función.
    MVC (Modelo – Vista – Controlador)
  • 34. Rodrigo Miranda Blog: www.rodrigomiranda.cl MVC
  • 35. Rodrigo Miranda Blog: www.rodrigomiranda.cl El MVC se aloja
  • 36. Rodrigo Miranda Blog: www.rodrigomiranda.cl Layout
  • 37. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • En toda aplicación web existe código HTML o PHP que se repite .
  • 38. Rodrigo Miranda Blog: www.rodrigomiranda.cl Solución Ineficiente
  • 39. Rodrigo Miranda Blog: www.rodrigomiranda.cl Opción Eficiente
  • 40. Rodrigo Miranda Blog: www.rodrigomiranda.cl Parte Importante de un Layout
  • 41. Rodrigo Miranda Blog: www.rodrigomiranda.cl Hojas de estilos, imágenes y archivos JavaScript
  • 42. Rodrigo Miranda Blog: www.rodrigomiranda.cl apps/miaplicacion/config/ view.yml
  • 43. Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 44. Rodrigo Miranda Blog: www.rodrigomiranda.cl Un subdirectorio CSS
  • 45. Rodrigo Miranda Blog: www.rodrigomiranda.cl Agregando atributo media
  • 46. Rodrigo Miranda Blog: www.rodrigomiranda.cl Acciones
  • 47. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Se definen como métodos de una clase.
    • El nombre de la clase que contiene a cada una de las acciones o métodos, comienza con el nombre del módulo seguida por la palabra Actions.
    Acciones
  • 48. Rodrigo Miranda Blog: www.rodrigomiranda.cl apps/administrador/modules/encuesta/actions/actions.class.php
  • 49. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Symfony utiliza una convención para deducir el nombre de una plantilla asociada a cada acción, que consiste en la acción seguida de la palabra Success .
    Plantilla o templates
  • 50. Rodrigo Miranda Blog: www.rodrigomiranda.cl apps/administrador/modules/encuesta/templates/ indexSuccess.php
  • 51. Rodrigo Miranda Blog: www.rodrigomiranda.cl Revisamos códigos
  • 52. Rodrigo Miranda Blog: www.rodrigomiranda.cl Petición y Respuesta
  • 53. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Cuando accedes a una página como encuesta/show/id/1 tú navegador envía una petición y el servidor web devuelve una respuesta .
    Petición y Respuesta
  • 54. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Symfony encapsula la petición en un objeto llamado sfWebRequest y la respuesta en un objeto sfWebResponse.
  • 55. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Objeto sfWebRequest
  • 56. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Métodos sfWebRequest
  • 57. Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 58. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Objeto sfWebResponse
  • 59. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Métodos sfWebResponse
  • 60. Rodrigo Miranda Blog: www.rodrigomiranda.cl Sistema de Enrutamiento
  • 61. Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 62. Rodrigo Miranda Blog: www.rodrigomiranda.cl ‘ encuesta/show?id=‘ .$encuesta->getId() encuesta/show/id/1
  • 63. Rodrigo Miranda Blog: www.rodrigomiranda.cl URI
  • 64. Rodrigo Miranda Blog: www.rodrigomiranda.cl Configurando Enrutamiento
  • 65. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Las conversiones entre URI internas y URL externas se define en el archivo de configuración routing.yml dentro del directorio config de las aplicaciones.
  • 66. Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 67. Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 68. Rodrigo Miranda Blog: www.rodrigomiranda.cl Personalizando el enrutamiento
  • 69. Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 70. Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Cuando se modifica la configuración de enrutamiento, los cambios se aplican instantáneamente en el entorno de desarrollo. Para el entorno de producción es necesario borrar las caché.
  • 71. Rodrigo Miranda Blog: www.rodrigomiranda.cl URI abreviada
  • 72. Rodrigo Miranda Blog: www.rodrigomiranda.cl Modificaciones al sistema.
  • 73. Rodrigo Miranda Blog: www.rodrigomiranda.cl Preguntas?