Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Symfony2: Segundos pasos

Symfony2: Segundos pasos

Presentación para Seminarios TheEvnt: Symfony2 por César Suárez Ortega

267ee9b8bfeb0c72b5dbe643bbc4433b?s=128

César Suárez Ortega

November 25, 2011
Tweet

Transcript

  1. Symfony2 segundos pasos

  2. Controladores frontales

  3. None
  4. Controladores • Reciben todas las peticiones. • “Arrancan” Symfony2. •

    Puede haber varios que carguen distintas configuraciones. • Por defecto hay 2: • Para producción. • Para desarrollo.
  5. Web Debug Bar • Version de Symfony • Detalles de

    PHP • Profiling token • Acción ejecutada • Tiempo de carga • Memoria consumida • Detalles sobre seguridad • Consultas ejecutadas
  6. Web Debug Bar – Configuration

  7. Web Debug Bar – Configuration

  8. Web Debug Bar – Request

  9. Web Debug Bar – Events

  10. Web Debug Bar – Logs

  11. Web Debug Bar – Doctrine

  12. Consola de Symfony2

  13. Consola de Symfony2 • php app/console * • Listar comandos:

    php app/console list • Tareas comunes desde consola. • Generadores automáticos del código. • Gestión de la base de datos. • Ayuda en la depuración.
  14. Greatest hits • php app/console cache:clear • php app/console assets:install

    • php app/console router:debug • php app/console generate:* (lo veremos luego) • php app/console doctrine:* (lo veremos luego)
  15. Hablemos de la M de MVC

  16. None
  17. Doctrine 2 • Se divide en 3 componentes independientes: •

    Doctrine Common • Doctrine DBAL (incluye Common) • Doctrine ORM (incluye DBAL + Common) • No tiene nada que ver con “Doctrine 1” • Reescrito totalmente. • No es ActiveRecord. • Pierde los Behaviors
  18. Doctrine 2

  19. Doctrine2: conceptos básicos • Entity • Objeto PHP ligero “normal”

    que equivale a una entidad. • Los atributos del objeto son los campos en la BD. • Los atributos deben estar encapsulados. • Puede contener otros métodos. • EntityManager • “Punto de acceso” único del ORM. • Gestión de la persistencia de objetos. • Ejecución de consultas para obtener objetos. • Patrón de diseño “Unit of Work”.
  20. Doctrine1 vs. Doctrine2

  21. Doctrine2 & Symfony2 • Doctrine2 viene por defecto incluido en

    Symfony2 (de momento). • Es un bundle más. • Doctrine2Bundle añade: • Definir Entities usando anotaciones. • Utilidades por línea de comandos.
  22. Aprendiendo con ejemplos

  23. Vamos a partir del proyecto bajado antes

  24. Proyecto con todo hecho https://github.com/csuarez/theevnt-symfony2

  25. Generando un bundle nuevo php app/console generate:bundle

  26. php app/console generate:bundle • Bundle namespace • TheEvnt/LibraryBundle • Bundle

    name • TheEvntLibraryBundle (default) • Target directory: • /var/www/Symfony/src • Configuration format • Annotation • Do you want to generate the whole directory structure • No • Do you confirm generation • Yes • Confirm automatic update of your Kernel • Yes • Confirm automatic update of the Routing • Yes
  27. Estructura Bundle

  28. Añadimos una carpeta para nuestras Entities

  29. Nuestra primera entidad

  30. ¡¡Faltan setters y getters!!

  31. php app/console doctrine:generate:entities TheEvnt/LibraryBundle/Entity/Book ¡¡Consola al rescate!!

  32. También habría valido php app/console doctrine:generate:entities TheEvntLibraryBundle php app/console doctrine:generate:entities

    TheEvnt
  33. Nuestra entidad a la BD php app/console doctrine:schema:update --force

  34. Nuestra entidad a BD

  35. Creando una acción que añada entidades

  36. http://localhost/Symfony/web/app_dev.php/createBook

  37. Creando una acción que borre entidades

  38. http://localhost/Symfony/web/app_dev.php/deleteBook/5

  39. Creando una acción que edite entidades

  40. http://localhost/Symfony/web/app_dev.php/incrementYear/5

  41. Añadiendo métodos a nuestra entidad

  42. Añadiendo métodos a nuestra entidad

  43. Añadiendo métodos a nuestra entidad

  44. Consultando en la base de datos

  45. Funciones de las clases repositorio

  46. Más funciones de las clases repositorio

  47. Consultas complejas

  48. Dos opciones DQL Doctrine Query Builder

  49. DQL • Lenguaje de consulta creado para Doctrine • Casi

    igual que SQL • Las entidades son clases • Los campos son atributos • Devuelven Entities
  50. Doctrine Query Builder • Manera alternativa para crear consultas. •

    Menos flexible que DQL. • Más legible que DQL. • Se usa un objeto QueryBuilder asociado a una Entity. • Implementa una interfaz fluida.
  51. Si tengo una consulta que uso mucho... ¿Dónde la coloco?

  52. ¿En una Entity?

  53. ¿En una Entity? ¡NO!

  54. ¿En una clase cualquiera?

  55. ¿En una clase cualquiera? Meh.

  56. Podemos crear repositorios propios

  57. En nuestra Entity...

  58. php app/console doctrine:generate:entities TheEvnt Y generamos la clase automáticamente src/TheEvnt/LibraryBundle/Repository

    Y luego...
  59. Podemos añadir métodos...

  60. ...y usarlos en nuestras acciones

  61. Relaciones entre entidades

  62. A partir de aquí voy a meter el turbo :(

  63. Tantos las relaciones 1:N y las N:M se definen en

    la Entity
  64. Modelo E/R

  65. src/TheEvnt/LibraryBundle/Entity/Author.php

  66. src/TheEvnt/LibraryBundle/Entity/Category.php

  67. Relaciones 1:N Book Author

  68. php app/console doctrine:generate:entities TheEvnt

  69. Relaciones 1:N Book

  70. Relaciones 1:N Author

  71. Relaciones N:M Book Category

  72. php app/console doctrine:generate:entities TheEvnt

  73. Relaciones N:M Book

  74. Relaciones N:M Category

  75. Doctrine2 LifeCycle Callbacks

  76. Ayudan a ejecutar acciones antes o después de algunos eventos

  77. Se definen con anotaciones

  78. LifeCycle Callbacks disponibles • preRemove • postRemove • prePersist •

    postPersist • preUpdate • postUpdate • postLoad • loadClassMetadata
  79. Scaffolding

  80. Proceso automático de generación de backend para entidades Controladores Acciones

    Vistas Rutas
  81. Para cada entidad se generan un CRUD Create Read Update

    Delete
  82. php app/console generate:doctrine:crud

  83. Formularios

  84. Formularios + Symfony2 • Symfony2 tiene un componente para formularios.

    • Se crean mediante clases. • Totalmente distinto a Symfony 1.X. • Se integran con las Entities de Doctrine2. • Las clases de formularios van en la carpeta Forms de un bundle. • Helpers Twig para renderizar formularios.
  85. Formularios + Symfony2

  86. Validadores

  87. Validadores de datos • Se pueden definir en las Entities

    de Doctrine2 mediante anotaciones. • Se integran con los formularios. • Ejecutan los validadores. • Muestran los mensajes de error.
  88. Carga automática de clases

  89. Añadiendo librerías de terceros

  90. En app/autoload.php Namespaces Con prefijos PEAR

  91. Añadiendo bundles de terceros

  92. Aparte de registrar los namespaces en autoload.php...

  93. En app/AppKernel.php

  94. ¿Ejemplos de bundles interesantes?

  95. Bundles de terceros interesantes • SonataAdminBundle // WhiteOctoberAdminBundle • FOSRestBundle

    • FOSFacebookBundle • PagerFanta • PropelBundle • DoctrineMongoDBBundle • StofDoctrineExtensionsBundle
  96. http://bundles.knplabs.org/ & http://github.com

  97. Y muchas más cosas se quedan en el tintero :(

  98. Sistema de caché

  99. Tests unitarios y funcionales • Tests unitarios: PHPUnit (Bye Lime!)

    • Tests funcionales: • Cliente que simula peticiones. • HTML Crawler.
  100. Seguridad Internacionalización Service Container Assetic SwiftMailer Monolog

  101. Y esto es todo :)

  102. ¡Gracias por vuestra atención! Es la hora de las preguntas

  103. e-mail suarez.ortega.cesar@gmail.com twitter @tharandur