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

Primeros pasos con Symfony2

Primeros pasos con Symfony2

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. Primeros pasos
    con Symfony 2

    View Slide

  2. Primeros pasos
    con Symfony 2

    View Slide

  3. Primeros pasos
    con Symfony2

    View Slide

  4. Symfony2
    es un framework nuevo

    View Slide

  5. Symfony2
    es un framework totalmente nuevo

    View Slide

  6. Symfony2
    es full-stack

    View Slide

  7. Utilidades para...

    Routing

    Sistema de plantillas.

    Gestión de formularios.

    Gestión de base de datos.

    Sistema de caché.

    Sistema de validación.

    Gestión de seguridad.

    Internacionalización.

    Envío de correos.

    Gestión de “assets”.

    Sistema de logging.

    Tests unitarios.

    Contenedor de servicios.

    Ayudas para depuración.

    View Slide

  8. Symfony2
    es fácil de aprender

    View Slide

  9. Symfony2
    es seguro

    View Slide

  10. SektionEins
    en Enero realizó una auditoría de seguridad.
    Resultado: http://symfony.com/blog/symfony2-security-audit

    View Slide

  11. Symfony2
    es rápido

    View Slide

  12. 20% más rápido que Solar 1.0.0beta3
    60% más rápido que Lithium 0.6
    75% más rápido que Yii 1.1.1
    2 veces más rápido que symfony 1.4.2
    3.5 veces más rápido que Zend 1.10
    5.5 veces más rápido que CakePHP 1.2.6
    69 veces más rápido que Flow3 1.0.0alpha7
    http://blog.newitfarmer.com/php/framework-php/1904/symfony2-performs-betterbetter-performance/

    View Slide

  13. Symfony2 tiene
    menos “magia”

    View Slide

  14. Symfony2
    está basado en componentes
    independientes

    View Slide


  15. DependencyInjection

    EventDispatcher

    HttpFoundation

    DomCrawler

    ClassLoader

    CssSelector

    HttpKernel

    BrowserKit

    Templating

    Translation

    Serializer

    Validator

    Security

    Routing

    Console

    Process

    Config

    Finder

    Locale

    Yaml

    Form

    View Slide

  16. Symfony2
    es el “pegamento” entre
    estos componentes
    +
    librerías de terceros

    View Slide

  17. Según Fabien Potencier...

    Symfony2 is a reusable set of
    standalone, decoupled, and cohesive
    PHP components that solve common
    web development problems.
    http://fabien.potencier.org/article/49/what-is-symfony2

    Symfony2 is also a full-stack web
    framework.

    View Slide

  18. Symfony2
    es fácil de extender

    View Slide

  19. Symfony2
    se extiende usando con bundles y está
    construido con lo mismo

    View Slide

  20. Symfony2
    usa PHP 5.3 intensivamente

    View Slide

  21. Symfony2
    se basa en “buenas ideas”

    View Slide

  22. PHPUnit
    Protocolo HTTP
    Django
    Inyección de dependencias
    Unit of Work (Doctrine 2)
    Anotaciones
    MVC
    YAML

    View Slide

  23. Symfony2
    y el protocolo HTTP

    View Slide

  24. View Slide

  25. El desarrollo web se basa
    SIEMPRE en:
    ● Recibir una petición.

    Preparar una respuesta.

    Enviar una respuesta.

    View Slide

  26. Workflow de Symfony2

    Todas las peticiones ejecutan un controlador central.

    El sistema de routing determina que acción hay que
    ejecutar.

    Esta acción prepara y devuelve una respuesta.

    View Slide

  27. View Slide

  28. A Bundle is a directory containing a set of files
    (PHP files, stylesheets, JavaScripts, images, ...)
    that implement a single feature (a blog, a forum,
    etc). In Symfony2, (almost) everything lives inside
    a bundle.

    View Slide

  29. View Slide

  30. Todos los componentes de Symfony2 son bundles
    Todo se estructura en bundles
    Tienen una estructura “fija”
    Los bundles sólo implementan una funcionalidad
    Son fáciles de portar a otros proyectos

    View Slide

  31. Estructura de un bundle

    View Slide

  32. Contienen todo lo necesario para ejecutar la
    funcionalidad que implementan
    Código PHP
    Entidades de base de datos
    Imágenes
    Formularios
    Plantillas
    Validadores
    CSS
    JavaScript
    Configuración

    View Slide

  33. Un proyecto Symfony2 tiene elementos comunes
    a todos los bundles, que los combina con los
    específicos de los bundles.

    View Slide

  34. Routing

    View Slide

  35. El routing tiene dos objetivos
    Desacoplar el código de las URLs
    Mostrar URLs amigables

    View Slide

  36. Routing

    Generalmente tenemos un .PHP que se
    referencia en una URL.

    /var/www/miproyecto/contacto.php

    http://midominio.com/miproyecto/contacto.php

    Si queremos cambiar la URL, tenemos que
    cambiar la localización de los ficheros.

    Si cambiamos la URL, tenemos que cambiar
    los links de nuestra aplicación.

    View Slide

  37. En Symfony2 las URLs se crean mediante
    “reglas” de routing que las asocian con acciones

    View Slide

  38. Anatomía de una ruta
    Nombre
    Acción
    Patrón

    View Slide

  39. De esta forma...

    Podemos cambiar la ruta sin tocar nada más.

    Podemos cambiar la acción a ejecutar
    libremente.

    Para generar links, lo haremos a través del
    nombre de la ruta.

    View Slide

  40. Es importante que
    nuestras URLs sean legibles
    Fáciles de memorizar
    Mejores para el SEO

    View Slide

  41. http://www.tiendamusica.com/show.php?
    artist=123&album=456

    View Slide

  42. http://www.tiendademusica.com/artist/el-
    fary/album/grandes-exitos

    View Slide

  43. Estructura del código fuente

    View Slide

  44. Bundles
    Controladores
    Acciones

    View Slide

  45. Controladores

    Un bundle tiene un número indeterminado de
    controladores.

    Se situan en la carpeta Controller.

    Un controlador es una clase que extiende
    Symfony\Bundle\FrameworkBundle\Controller\Controller

    Hereda varios métodos de ayuda para acceder
    a las características de Symfony2.

    View Slide

  46. Acciones

    Un método dentro de un controlador.

    Nomenclatura: nombreAction

    Una acción recibe una petición y devuelve una
    respuesta.

    Generalmente tienen asociada una plantilla
    (vista) para los resultados.

    Se acceden vía al sistema de routing.

    Son la C de MVC.

    View Slide

  47. View Slide

  48. Ejemplo

    LibraryBundle

    DefaultController
    – indexAction

    AuthorController
    – addAction
    – deleteAction
    – editAction
    – showAction

    BookController
    – addAction
    – deleteAction
    – editAction
    – showAction

    View Slide

  49. Ejemplo

    View Slide

  50. Vistas

    View Slide

  51. Sobre las vistas

    Son lo que “ve” el usuario final.

    Generalmente una acción tiene asociada una
    vista.

    Separan la presentación del negocio.

    La acción pasa a la vista varios parámetros.

    Symfony2 integra el lenguaje de plantillas
    Twig.

    Son la V de MVC.

    View Slide

  52. View Slide

  53. View Slide

  54. Volviendo al workflow...

    View Slide

  55. Instalemos
    Symfony2

    View Slide

  56. Instalando Symfony2

    Vamos a http://www.symfony.com

    Download Now!

    Symfony 2.0.6 (tar.gz o zip).

    Lo descomprimimos en nuestra carpeta de
    Apache

    En Ubuntu/Linux Mint quedaría: /var/www/Symfony

    Entramos en
    http://localhost/Symfony/web/config.php

    View Slide

  57. Instalando Symfony2

    View Slide

  58. Instalando Symfony2

    View Slide

  59. Instalando Symfony2

    View Slide

  60. Instalando Symfony2

    View Slide

  61. Instalando Symfony2

    View Slide

  62. Instalando Symfony2

    View Slide

  63. Estructura del proyecto

    app Configuración general de la herramienta


    src Código PHP (aquí van los bundles)


    vendor Librerías


    web Recursos visibles del proyecto.

    View Slide

  64. Workflow de Symfony2

    View Slide

  65. Workflow de Symfony2

    View Slide

  66. Workflow de Symfony2

    View Slide

  67. Workflow de Symfony2

    View Slide

  68. Symfony2
    ya trae un bundle hecho

    View Slide

  69. en src/Acme/DemoBundle
    Acme → Vendor
    DemoBundle → Nombre del bundle

    View Slide

  70. src/Acme/DemoBundle

    Controller Controladores y acciones


    Resources/config/ Configuración propia del Bundle.


    Resources/views/ Vistas.


    Resources/public/ Recursos web propios del Bundle (imágenes,

    CSSs, …).

    View Slide

  71. Veamos app/config/routing_dev.yml

    View Slide

  72. Una ruta simple
    Bundle
    (Vendor + Nombre)
    Controlador.
    (sin el sufijo “Controller”)
    Acción
    (sin el sufijo “Action”)

    View Slide

  73. La ruta con nombre “_welcome” corresponde a
    “/” y ejecuta la método indexAction de la clase
    WelcomeController que es parte del bundle
    DemoBundle de Acme

    View Slide

  74. Es decir

    src/Acme/DemoBundle/WelcomeController.php

    function indexAction

    View Slide

  75. Un bundle o un controlador
    puede definir sus propias rutas

    View Slide

  76. app/config/routing_dev.yml
    Tipo de configuración
    dentro del bundle
    Prefijo que van a tener
    todas las rutas del controlador
    Elemento que coontiene
    las rutas

    View Slide

  77. ¿Anotaciones?
    ¿Rutas en un PHP?

    View Slide

  78. Symfony2
    tiene una implementación de
    anotaciones para PHP
    ¡¡no nativas!!

    View Slide

  79. En programación, una anotación es una forma de
    añadir metadatos al código fuente que están
    disponibles para la aplicación
    en tiempo de ejecución.
    (de Wikipedia)

    View Slide

  80. src/Acme/DemoBundle/Controller/DemoController.php
    Nombre
    Patrón
    Acción

    View Slide

  81. Podemos configurar las rutas con
    YAML
    Anotaciones
    PHP
    XML

    View Slide

  82. La definición de rutas y patrones es muy
    flexible

    View Slide

  83. Las rutas se pueden parametrizar
    Anotaciones
    YAML

    View Slide

  84. Valores por defecto y requisitos
    Anotaciones
    YAML

    View Slide

  85. Distinguir por método de la petición
    YAML

    View Slide

  86. Distinguir por método de la petición
    Anotaciones

    View Slide

  87. Poder elegir el formato de salida
    Anotaciones
    YAML

    View Slide

  88. ¿Anotaciones o YAML?

    View Slide

  89. Creemos una acción
    y vamos a mejorarla

    View Slide

  90. Versión más básica de una acción

    View Slide

  91. Añadimos la acción

    View Slide

  92. Desacoplando la vista de la acción

    View Slide

  93. Creamos una vista en un fichero aparte

    View Slide

  94. Indicamos en la acción que vista vamos a usar
    Bundle Controlador Vista Vista a String

    View Slide

  95. Podemos simplicar más

    View Slide

  96. Simplificando...
    Vista a String + return new Response

    View Slide

  97. Podemos definir la vista
    como una anotación

    View Slide

  98. Simplificando más con las anotaciones

    View Slide

  99. ¿No podemos guardar la vista en un sitio
    que Symfony2 la detecte automáticamente?

    View Slide

  100. Convention Over Configuration FTW!!!
    src/AcmeDemoBundle/Resources/views/Demo/bye.html.twig

    View Slide

  101. View Slide

  102. Repasando

    View Slide

  103. ¡¡Descanso!!

    View Slide

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

    View Slide