deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y AngularJS
Desymfony 2011 - Introducción a Symfony2
-
Upload
javier-eguiluz -
Category
Technology
-
view
32.292 -
download
1
description
Transcript of Desymfony 2011 - Introducción a Symfony2
JORNADAS SYMFONY 2011 1-3 JULIO, CASTELLÓN DESYMFONY.COM
Introducción a Symfony2Javier Eguiluz
JORNADAS SYMFONY 2011 están patrocinadas porPa
troc
inad
ores
PL
ATIN
O y
OR
OPa
troc
inad
ores
PL
ATA
Patr
ocin
ador
es
BR
ON
CECo
labo
rado
res
Algunas partes de esta presentación no se pueden entender bien sin ver el vídeo de su impartición.
Puedes acceder al vídeo enhttp://bit.ly/sf-tutorial1
importante
« framework PHP »
Versátil
1 2 3 4 5 6 7 8 9 101
full!stack framework
full!stack framework
components framework
full!stack framework
components framework
!micro
framework
full!stack framework
components framework
!micro
framework
Proyecto Symfony
BrowserKit
ClassLoader
Console
CssSelector
DependencyInjection
DomCrawler
EventDispatcher
Finder
Form
HttpFoundation
HttpKernel
Locale
Process
Routing
Security
Serializer
Templating
Translation
Validator
Yaml
Config 21librerías
BrowserKit
ClassLoader
Console
CssSelector
DependencyInjection
DomCrawler
EventDispatcher
Finder
Form
HttpFoundation
HttpKernel
Locale
Process
Routing
Security
Serializer
Templating
Translation
Validator
Yaml
Config
componentes
BrowserKit
ClassLoader
Console
CssSelector
DependencyInjection
DomCrawler
EventDispatcher
Finder
Form
HttpFoundation
HttpKernel
Locale
Process
Routing
Security
Serializer
Templating
Translation
Validator
Yaml
Config
componentes
Assetic
Doctrine
Monolog
SwiftMailer
librerías externas
BrowserKit
ClassLoader
Console
CssSelector
DependencyInjection
DomCrawler
EventDispatcher
Finder
Form
HttpFoundation
HttpKernel
Locale
Process
Routing
Security
Serializer
Templating
Translation
Validator
Yaml
Config
componentes
Assetic
Doctrine
Monolog
SwiftMailer
librerías externas
DoctrineBundle
bundles
SecurityBundle FrameworkBundle +6 Bundles
Framework Symfony2
BrowserKit
ClassLoader
Console
CssSelector
DependencyInjection
DomCrawler
EventDispatcher
Finder
Form
HttpFoundation
HttpKernel
Locale
Process
Routing
Security
Serializer
Templating
Translation
Validator
Yaml
Config
componentes
Assetic
Doctrine
Monolog
SwiftMailer
librerías externas
DoctrineBundle
bundles
SecurityBundle FrameworkBundle +6 Bundles
Framework Symfony2
BrowserKit
ClassLoader
CssSelector
DomCrawler
EventDispatcher
HttpFoundation
HttpKernel
Routing
Templating
Yaml
componentes
!Framework
SilexBrowserKit
ClassLoader
CssSelector
DomCrawler
EventDispatcher
HttpFoundation
HttpKernel
Routing
Templating
Yaml
componentes
1 archivo 400 KB
Útil
1 2 3 4 5 6 7 8 9 102
¿ Por qué utilizar un framework bueno ?
• persistencia datos
• seguridad
• formularios
• validación
• plantillas
• archivos de log
• rendimiento
• cache
• archivos web
• internacionalización
• tareas programadas
• enrutamiento
Fuente: Ryan Weaver, http://slidesha.re/iuptB2 (pág. 9)
retos de la programación web
• persistencia datos
• seguridad
• formularios
• validación
• plantillas
• archivos de log
• rendimiento
• cache
• archivos web
• internacionalización
• tareas programadas
• enrutamiento
Fuente: Ryan Weaver, http://slidesha.re/iuptB2 (pág. 9)
lo que soluciona Symfony2
industrialización
Buenas prácticas
1 2 3 4 5 6 7 8 9 103
<http> <intercept-url pattern='/login.htm*' filters='none'/> <intercept-url pattern='/**' access='ROLE_USER' /> <form-login login-page='/login.htm' default-target-url='/home.htm' always-use-default-target='true' /></http>
firewalls: login: pattern: ^/login anonymous: ~ all: pattern: ^/ form_login: login_path: /login default_target_path: /home.htm always_use_default_target_path: true
<http> <intercept-url pattern='/login.htm*' filters='none'/> <intercept-url pattern='/**' access='ROLE_USER' /> <form-login login-page='/login.htm' default-target-url='/home.htm' always-use-default-target='true' /></http>
EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
EntityManager em = emf.createEntityManager();
Usuario anonimo = new Usuario();anonimo.setNombre("Anónimo");anonimo.setEdad(20);
em.persist(anonimo);em.flush();
EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
EntityManager em = emf.createEntityManager();
Usuario anonimo = new Usuario();anonimo.setNombre("Anónimo");anonimo.setEdad(20);
em.persist(anonimo);em.flush();
$em = $this->get('doctrine')->getEntityManager();
$anonimo = new Usuario();$anonimo->setNombre("Anónimo");$anonimo->setEdad(20);
$em->persist($anonimo);$em->flush();
ruby script/generate model Articulo titulo:string body:text
ruby script/generate model Articulo titulo:string body:text
php app/console doctrine:generate:entity MiBundle:Articulo "titulo:string(255) body:text"
{% extends "base_generic.html" %}{% block title %} {{ seccion.titulo }} {% endblock %}{% block content %}<h1> {{ seccion.titulo }} </h1>
{% for articulo in articulos %} <h2> {{ articulo.titulo|upper }} </h2>{% endfor %}{% endblock %}
{% extends "base_generic.html" %}{% block title %} {{ seccion.titulo }} {% endblock %}{% block content %}<h1> {{ seccion.titulo }} </h1>
{% for articulo in articulos %} <h2> {{ articulo.titulo|upper }} </h2>{% endfor %}{% endblock %}
{% extends "::base_generic.html" %}{% block title %} {{ seccion.titulo }} {% endblock %}{% block content %}<h1> {{ seccion.titulo }} </h1>
{% for articulo in articulos %} <h2> {{ articulo.titulo|upper }} </h2>{% endfor %}{% endblock %}
Twig
Assetic
Monolog
Flexible
1 2 3 4 5 6 7 8 9 104
novato clásico experto
YAMLnovato clásico experto
YAMLXMLnovato clásico experto
YAMLXMLPHPnovato clásico experto
archivos de configuración
PHPYAML XML
plantillas
PHPTwig
almacenamiento
NoSQLSQL
Configuración PHP XML YAML
Plantillas PHP Twig
Almacenamiento SQL NoSQL
Flujo de trabajo Anotaciones Archivos Anotaciones Archivos Anotaciones Archivos
Rendimiento
1 2 3 4 5 6 7 8 9 105
« La gran obsesión de Symfony2 »
5.3.2
archivos de configuración
YAML XMLPHP
todo se transforma a PHP
PHP
YAML XML
Caché
PHP
YAML XML
Caché
anotacionesTwig
Aplicación
BD
Aplicación
BD
Aplicación
BD
Aplicación
BD
Aplicación
BD
Reverse Proxy
Aplicación
BD
Reverse Proxy
Soporte
1 2 3 4 5 6 7 8 9 106
1.x
2.x
1.0
Feb. 2007
1.2
Dic. 2008
1.4
Dic. 2009
Nov. 2012
1.4.x
2.0
Jul. 2011
Jun. 2016
2.x
hace 5 años no existía
Documentación
1 2 3 4 5 6 7 8 9 107
10 libros 8 idiomas 15.000 págs.
TheBook~ 200 págs.
The Cookook+50 recetas
Referencecientos de opciones de configuración
APIcientos de métodos
Comunidad
1 2 3 4 5 6 7 8 9 108
+200
Doctrine
PropelAssetic
Behat
Twig
SilexImagine
SwiftMailer
KrisWallsmith
JonathanH. Wage
SebastianBergmann
Bulat Shakirzyanov
Konstantin Kudryashov
Benjamin Eberlei
Nils Adermann
François Zaninotto
Thibault Duplessis
Lukas K. Smith
RyanWeaver
Bernhard Schussek
siwapp.org
apostrophenow.orgdiem-project.org
phpbb.com
Visionario
1 2 3 4 5 6 7 8 9 109
Foto: Guillaume Ponçon
Fabien Potencier
Fundador y responsable del
proyecto Symfony
Fabien PotencierOctubre 2005
Symfony 1 requerirá como mínimo PHP 5.2.4
Fabien PotencierOctubre 2009
Doctrine 2.0 es una de las mejores cosas que le han
pasado a PHP
Fabien PotencierSeptiembre 2008
Symfony2 tendrá un contenedor de Inyección de Dependencias basado
en Spring
Fabien PotencierSeptiembre 2010
Twig será el formato por defecto de las plantillas de
Symfony2
Popular
1 2 3 4 5 6 7 8 9 1010
para programadores#1
Fuente: Github
0
125000
250000
375000
500000
páginas vistas
0
750
1500
2250
3000
watchers
0
175
350
525
700
forks
0
375
750
1125
1500
pull requests
para el público en general
Fuente: Google Trends
#1
0 0,25 0,5 0,75 1
popularidad España, 2011
Fuente: Google Trends
#1 Argentina#1 Colombia#1 Chile#1 Cuba#1 Mexico#1 Perú#1 Uruguay#1 Venezuela
Fuente: Google Trends & Alexa
en ofertas de trabajo
Fuente: Infojobs
#1
Fuente: deSymfony
#1
1. versátil
3. buenas prácticas
5. rendimiento
7. documentación
9. visionario
2. útil
4. flexible
6. soporte
8. comunidad
10. popular
Symfony2 es