desymfony 2011 - introducción a symfony2

Post on 15-Jan-2015

32.292 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Las Jornadas Symfony 2011 comenzaron con una breve introducción a Symfony2. Durante la presentación se muestran algunas de las características más destacadas de Symfony2 a través de diez palabras clave.

TRANSCRIPT

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

+200

3217061 43

Fuente: Github & andrewnacin.com

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

javier.eguiluz@gmail.com

twitter.com/javiereguiluz

linkedin.com/in/javiereguiluz

contacto

top related