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