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

267ee9b8bfeb0c72b5dbe643bbc4433b?s=128

César Suárez Ortega

November 25, 2011
Tweet

Transcript

  1. Primeros pasos con Symfony 2

  2. Primeros pasos con Symfony 2

  3. Primeros pasos con Symfony2

  4. Symfony2 es un framework nuevo

  5. Symfony2 es un framework totalmente nuevo

  6. Symfony2 es full-stack

  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.
  8. Symfony2 es fácil de aprender

  9. Symfony2 es seguro

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

  11. Symfony2 es rápido

  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/
  13. Symfony2 tiene menos “magia”

  14. Symfony2 está basado en componentes independientes

  15. • DependencyInjection • EventDispatcher • HttpFoundation • DomCrawler • ClassLoader

    • CssSelector • HttpKernel • BrowserKit • Templating • Translation • Serializer • Validator • Security • Routing • Console • Process • Config • Finder • Locale • Yaml • Form
  16. Symfony2 es el “pegamento” entre estos componentes + librerías de

    terceros
  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.
  18. Symfony2 es fácil de extender

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

    lo mismo
  20. Symfony2 usa PHP 5.3 intensivamente

  21. Symfony2 se basa en “buenas ideas”

  22. PHPUnit Protocolo HTTP Django Inyección de dependencias Unit of Work

    (Doctrine 2) Anotaciones MVC YAML
  23. Symfony2 y el protocolo HTTP

  24. None
  25. El desarrollo web se basa SIEMPRE en: • Recibir una

    petición. • Preparar una respuesta. • Enviar una respuesta.
  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.
  27. None
  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.
  29. None
  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
  31. Estructura de un bundle

  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
  33. Un proyecto Symfony2 tiene elementos comunes a todos los bundles,

    que los combina con los específicos de los bundles.
  34. Routing

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

    URLs Mostrar URLs amigables
  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.
  37. En Symfony2 las URLs se crean mediante “reglas” de routing

    que las asocian con acciones
  38. Anatomía de una ruta Nombre Acción Patrón

  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.
  40. Es importante que nuestras URLs sean legibles Fáciles de memorizar

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

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

  43. Estructura del código fuente

  44. Bundles Controladores Acciones

  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.
  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.
  47. None
  48. Ejemplo • LibraryBundle • DefaultController – indexAction • AuthorController –

    addAction – deleteAction – editAction – showAction • BookController – addAction – deleteAction – editAction – showAction
  49. Ejemplo

  50. Vistas

  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.
  52. None
  53. None
  54. Volviendo al workflow...

  55. Instalemos Symfony2

  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
  57. Instalando Symfony2

  58. Instalando Symfony2

  59. Instalando Symfony2

  60. Instalando Symfony2

  61. Instalando Symfony2

  62. Instalando Symfony2

  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. →
  64. Workflow de Symfony2

  65. Workflow de Symfony2

  66. Workflow de Symfony2

  67. Workflow de Symfony2

  68. Symfony2 ya trae un bundle hecho

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

  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, …).
  71. Veamos app/config/routing_dev.yml

  72. Una ruta simple Bundle (Vendor + Nombre) Controlador. (sin el

    sufijo “Controller”) Acción (sin el sufijo “Action”)
  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
  74. Es decir • src/Acme/DemoBundle/WelcomeController.php • function indexAction

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

  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
  77. ¿Anotaciones? ¿Rutas en un PHP?

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

  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)
  80. src/Acme/DemoBundle/Controller/DemoController.php Nombre Patrón Acción

  81. Podemos configurar las rutas con YAML Anotaciones PHP XML

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

  83. Las rutas se pueden parametrizar Anotaciones YAML

  84. Valores por defecto y requisitos Anotaciones YAML

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

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

  87. Poder elegir el formato de salida Anotaciones YAML

  88. ¿Anotaciones o YAML?

  89. Creemos una acción y vamos a mejorarla

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

  91. Añadimos la acción

  92. Desacoplando la vista de la acción

  93. Creamos una vista en un fichero aparte

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

    Controlador Vista Vista a String
  95. Podemos simplicar más

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

  97. Podemos definir la vista como una anotación

  98. Simplificando más con las anotaciones

  99. ¿No podemos guardar la vista en un sitio que Symfony2

    la detecte automáticamente?
  100. Convention Over Configuration FTW!!! src/AcmeDemoBundle/Resources/views/Demo/bye.html.twig

  101. None
  102. Repasando

  103. ¡¡Descanso!!

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