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

César Suárez Ortega

November 25, 2011
Tweet

More Decks by César Suárez Ortega

Other Decks in Programming

Transcript

  1. Symfony2
    segundos pasos

    View Slide

  2. Controladores frontales

    View Slide

  3. View Slide

  4. Controladores

    Reciben todas las peticiones.

    “Arrancan” Symfony2.

    Puede haber varios que carguen distintas
    configuraciones.

    Por defecto hay 2:

    Para producción.

    Para desarrollo.

    View Slide

  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

    View Slide

  6. Web Debug Bar – Configuration

    View Slide

  7. Web Debug Bar – Configuration

    View Slide

  8. Web Debug Bar – Request

    View Slide

  9. Web Debug Bar – Events

    View Slide

  10. Web Debug Bar – Logs

    View Slide

  11. Web Debug Bar – Doctrine

    View Slide

  12. Consola de
    Symfony2

    View Slide

  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.

    View Slide

  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)

    View Slide

  15. Hablemos de la
    M de MVC

    View Slide

  16. View Slide

  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

    View Slide

  18. Doctrine 2

    View Slide

  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”.

    View Slide

  20. Doctrine1 vs. Doctrine2

    View Slide

  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.

    View Slide

  22. Aprendiendo con
    ejemplos

    View Slide

  23. Vamos a partir del
    proyecto bajado antes

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  27. Estructura Bundle

    View Slide

  28. Añadimos una carpeta para nuestras Entities

    View Slide

  29. Nuestra primera entidad

    View Slide

  30. ¡¡Faltan setters y getters!!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  34. Nuestra entidad a BD

    View Slide

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

    View Slide

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

    View Slide

  37. Creando una acción que borre entidades

    View Slide

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

    View Slide

  39. Creando una acción que edite entidades

    View Slide

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

    View Slide

  41. Añadiendo métodos a nuestra entidad

    View Slide

  42. Añadiendo métodos a nuestra entidad

    View Slide

  43. Añadiendo métodos a nuestra entidad

    View Slide

  44. Consultando en la
    base de datos

    View Slide

  45. Funciones de las clases repositorio

    View Slide

  46. Más funciones de las clases repositorio

    View Slide

  47. Consultas
    complejas

    View Slide

  48. Dos opciones
    DQL
    Doctrine Query Builder

    View Slide

  49. DQL

    Lenguaje de consulta creado para Doctrine

    Casi igual que SQL

    Las entidades son clases

    Los campos son atributos

    Devuelven Entities

    View Slide

  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.

    View Slide

  51. Si tengo una consulta que uso mucho...
    ¿Dónde la coloco?

    View Slide

  52. ¿En una Entity?

    View Slide

  53. ¿En una Entity?
    ¡NO!

    View Slide

  54. ¿En una clase cualquiera?

    View Slide

  55. ¿En una clase cualquiera?
    Meh.

    View Slide

  56. Podemos crear repositorios propios

    View Slide

  57. En nuestra Entity...

    View Slide

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

    View Slide

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

    View Slide

  60. ...y usarlos en nuestras acciones

    View Slide

  61. Relaciones entre
    entidades

    View Slide

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

    View Slide

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

    View Slide

  64. Modelo E/R

    View Slide

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

    View Slide

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

    View Slide

  67. Relaciones 1:N
    Book
    Author

    View Slide

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

    View Slide

  69. Relaciones 1:N
    Book

    View Slide

  70. Relaciones 1:N
    Author

    View Slide

  71. Relaciones N:M
    Book
    Category

    View Slide

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

    View Slide

  73. Relaciones N:M
    Book

    View Slide

  74. Relaciones N:M
    Category

    View Slide

  75. Doctrine2
    LifeCycle Callbacks

    View Slide

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

    View Slide

  77. Se definen con anotaciones

    View Slide

  78. LifeCycle Callbacks disponibles

    preRemove

    postRemove

    prePersist

    postPersist

    preUpdate

    postUpdate

    postLoad

    loadClassMetadata

    View Slide

  79. Scaffolding

    View Slide

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

    View Slide

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

    View Slide

  82. php app/console
    generate:doctrine:crud

    View Slide

  83. Formularios

    View Slide

  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.

    View Slide

  85. Formularios + Symfony2

    View Slide

  86. Validadores

    View Slide

  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.

    View Slide

  88. Carga automática
    de clases

    View Slide

  89. Añadiendo
    librerías de terceros

    View Slide

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

    View Slide

  91. Añadiendo
    bundles de terceros

    View Slide

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

    View Slide

  93. En app/AppKernel.php

    View Slide

  94. ¿Ejemplos de bundles interesantes?

    View Slide

  95. Bundles de terceros interesantes

    SonataAdminBundle //
    WhiteOctoberAdminBundle

    FOSRestBundle

    FOSFacebookBundle

    PagerFanta

    PropelBundle

    DoctrineMongoDBBundle

    StofDoctrineExtensionsBundle

    View Slide

  96. http://bundles.knplabs.org/
    &
    http://github.com

    View Slide

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

    View Slide

  98. Sistema de caché

    View Slide

  99. Tests unitarios y funcionales

    Tests unitarios: PHPUnit (Bye Lime!)

    Tests funcionales:

    Cliente que simula peticiones.

    HTML Crawler.

    View Slide

  100. Seguridad
    Internacionalización
    Service Container
    Assetic
    SwiftMailer
    Monolog

    View Slide

  101. Y esto es todo :)

    View Slide

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

    View Slide

  103. e-mail
    [email protected]
    twitter
    @tharandur

    View Slide