Slide 1

Slide 1 text

Primeros pasos con Symfony 2

Slide 2

Slide 2 text

Primeros pasos con Symfony 2

Slide 3

Slide 3 text

Primeros pasos con Symfony2

Slide 4

Slide 4 text

Symfony2 es un framework nuevo

Slide 5

Slide 5 text

Symfony2 es un framework totalmente nuevo

Slide 6

Slide 6 text

Symfony2 es full-stack

Slide 7

Slide 7 text

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.

Slide 8

Slide 8 text

Symfony2 es fácil de aprender

Slide 9

Slide 9 text

Symfony2 es seguro

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Symfony2 es rápido

Slide 12

Slide 12 text

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/

Slide 13

Slide 13 text

Symfony2 tiene menos “magia”

Slide 14

Slide 14 text

Symfony2 está basado en componentes independientes

Slide 15

Slide 15 text

● DependencyInjection ● EventDispatcher ● HttpFoundation ● DomCrawler ● ClassLoader ● CssSelector ● HttpKernel ● BrowserKit ● Templating ● Translation ● Serializer ● Validator ● Security ● Routing ● Console ● Process ● Config ● Finder ● Locale ● Yaml ● Form

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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.

Slide 18

Slide 18 text

Symfony2 es fácil de extender

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Symfony2 usa PHP 5.3 intensivamente

Slide 21

Slide 21 text

Symfony2 se basa en “buenas ideas”

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

Symfony2 y el protocolo HTTP

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

El desarrollo web se basa SIEMPRE en: ● Recibir una petición. ● Preparar una respuesta. ● Enviar una respuesta.

Slide 26

Slide 26 text

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.

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

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.

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Estructura de un bundle

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

Routing

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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.

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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.

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

Estructura del código fuente

Slide 44

Slide 44 text

Bundles Controladores Acciones

Slide 45

Slide 45 text

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.

Slide 46

Slide 46 text

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.

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

Ejemplo ● LibraryBundle ● DefaultController – indexAction ● AuthorController – addAction – deleteAction – editAction – showAction ● BookController – addAction – deleteAction – editAction – showAction

Slide 49

Slide 49 text

Ejemplo

Slide 50

Slide 50 text

Vistas

Slide 51

Slide 51 text

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.

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

Volviendo al workflow...

Slide 55

Slide 55 text

Instalemos Symfony2

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

Instalando Symfony2

Slide 58

Slide 58 text

Instalando Symfony2

Slide 59

Slide 59 text

Instalando Symfony2

Slide 60

Slide 60 text

Instalando Symfony2

Slide 61

Slide 61 text

Instalando Symfony2

Slide 62

Slide 62 text

Instalando Symfony2

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

Workflow de Symfony2

Slide 65

Slide 65 text

Workflow de Symfony2

Slide 66

Slide 66 text

Workflow de Symfony2

Slide 67

Slide 67 text

Workflow de Symfony2

Slide 68

Slide 68 text

Symfony2 ya trae un bundle hecho

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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, …).

Slide 71

Slide 71 text

Veamos app/config/routing_dev.yml

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

Es decir ● src/Acme/DemoBundle/WelcomeController.php ● function indexAction

Slide 75

Slide 75 text

Un bundle o un controlador puede definir sus propias rutas

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

¿Anotaciones? ¿Rutas en un PHP?

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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)

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

Podemos configurar las rutas con YAML Anotaciones PHP XML

Slide 82

Slide 82 text

La definición de rutas y patrones es muy flexible

Slide 83

Slide 83 text

Las rutas se pueden parametrizar Anotaciones YAML

Slide 84

Slide 84 text

Valores por defecto y requisitos Anotaciones YAML

Slide 85

Slide 85 text

Distinguir por método de la petición YAML

Slide 86

Slide 86 text

Distinguir por método de la petición Anotaciones

Slide 87

Slide 87 text

Poder elegir el formato de salida Anotaciones YAML

Slide 88

Slide 88 text

¿Anotaciones o YAML?

Slide 89

Slide 89 text

Creemos una acción y vamos a mejorarla

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

Añadimos la acción

Slide 92

Slide 92 text

Desacoplando la vista de la acción

Slide 93

Slide 93 text

Creamos una vista en un fichero aparte

Slide 94

Slide 94 text

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

Slide 95

Slide 95 text

Podemos simplicar más

Slide 96

Slide 96 text

Simplificando... Vista a String + return new Response

Slide 97

Slide 97 text

Podemos definir la vista como una anotación

Slide 98

Slide 98 text

Simplificando más con las anotaciones

Slide 99

Slide 99 text

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

Slide 100

Slide 100 text

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

Slide 101

Slide 101 text

No content

Slide 102

Slide 102 text

Repasando

Slide 103

Slide 103 text

¡¡Descanso!!

Slide 104

Slide 104 text

e-mail [email protected] twitter @tharandur