SlideShare una empresa de Scribd logo
domingo 23 de junio de 13
¡muchas gracias a nuestros
patrocinadores!
deSymfony
domingo 23 de junio de 13
Quién soy
domingo 23 de junio de 13
Nací en Córdoba
Trabajo en Londres
Javier López
domingo 23 de junio de 13
He trabajado
IPC Media y Sensio Labs UK
Trabajo como Lead Engineer
TimeOut
Organizo
deSymfony
domingo 23 de junio de 13
Razones para pasarse a
Symfony 2.3
domingo 23 de junio de 13
#1
Estabilidad para productos
y empresas
domingo 23 de junio de 13
2012 2013 2014 2015 2016 2017
2.0
2.1
2.2
2.3
2.4
2.5
2.6
2.7
Estabilización
Mantenimiento
Desarrollo
domingo 23 de junio de 13
2012 2013 2014 2015 2016 2017
2.0
2.1
2.2
2.3
2.4
2.5
2.6
2.7
Estabilización
Mantenimiento
Desarrollo
Primera LTS de la era 2.x
domingo 23 de junio de 13
2012 2013 2014 2015 2016 2017
2.0
2.1
2.2
2.3
2.4
2.5
2.6
2.7
Estabilización
Mantenimiento
Desarrollo
Primera LTS de la era 2.x
Backwards compatibility
domingo 23 de junio de 13
#2
Arquitectura más
desacoplada
domingo 23 de junio de 13
BrowserKit
Finder
Locale
Routing
ClassLoader Config Console CssSelector
DI DomCrawler EventDispatcher Filesystem
Form HttpFoundation HttpKernel
Process
Security Serializer Templating
Translation Validator
Yaml
22 componentes2.0
domingo 23 de junio de 13
BrowserKit
Finder
Locale
Routing
ClassLoader Config Console CssSelector
DI DomCrawler EventDispatcher Filesystem
Form HttpFoundation HttpKernel
OptionsResolver Process
Security Serializer Templating
Translation Validator
Yaml
23 componentes2.12.0
domingo 23 de junio de 13
BrowserKit
Finder
Locale
Routing
ClassLoader Config Console CssSelector
DI DomCrawler EventDispatcher Filesystem
Form HttpFoundation HttpKernel
OptionsResolver Process PropertyAccess
Security Serializer Stopwatch Templating
Translation Validator
Yaml
25 componentes2.22.12.0
domingo 23 de junio de 13
BrowserKit
Debug
Finder
Locale
Routing
ClassLoader Config Console CssSelector
DI DomCrawler EventDispatcher Filesystem
Form HttpFoundation HttpKernel Intl
OptionsResolver Process PropertyAccess
Security Serializer Stopwatch Templating
Translation Validator
Yaml
2.3 27 componentes2.22.12.0
domingo 23 de junio de 13
#3
Más documentación
domingo 23 de junio de 13
2.0
20
109
51
Book
Cookbook
2.1
20
118
58
Componentes
20
120
63
2.2
20
123
68
2.3
# páginas
domingo 23 de junio de 13
#4
Más fácil de depurar
domingo 23 de junio de 13
Más niveles de verbosidad
$ php app/console foo --verbose=1 # -v
$ php app/console foo --verbose=2 # -vv
$ php app/console foo --verbose=3 # -vvv
domingo 23 de junio de 13
class MyCommand extends Command
{
protected function execute($input, $output)
{
$verbosity = $output->getVerbosity();
if ($verbosity === OutputInterface::VERBOSITY_VERBOSE)
{
$output->writeln("Información");
}
if ($verbosity === OutputInterface::VERBOSITY_VERY_VERBOSE)
{
$output->writeln("Más información");
}
if ($verbosity === OutputInterface::VERBOSITY_DEBUG)
{
$output->writeln("Mucho más información");
}
}
domingo 23 de junio de 13
parámetros de configuración
$ console container:debug --parameters
$ console container:debug --parameter=kernel.debug
domingo 23 de junio de 13
stack trace en texto plano
domingo 23 de junio de 13
más información en router:match
$ php app/console router:match /demo/hello/fabien
Route "_demo_hello" matches
[router] Route "_demo_hello"
Name _demo_hello
Path /demo/hello/{name}
Host ANY
Scheme ANY
Method ANY
Class SymfonyComponentRoutingRoute
Defaults _controller: AcmeDemoBundleController
DemoController::helloAction
Requirements NO CUSTOM
Options compiler_class: SymfonyComponentRoutingRouteCompiler
Path-Regex #^/demo/hello/(?P<name>[^/]++)$#s
domingo 23 de junio de 13
Componente Debug
domingo 23 de junio de 13
echo $foo
domingo 23 de junio de 13
Notice: Undefined variable: foo in
index.php on line 1
domingo 23 de junio de 13
use SymfonyComponentDebugDebug;
Debug::$enable();
echo $foo;
domingo 23 de junio de 13
PHP Fatal error: Uncaught exception 'SymfonyComponentDebug
ExceptionContextErrorException' with message 'Notice: Undefined
variable: foo in index.php line 9' in index.php:9
Stack trace:
#0 index.php(9): SymfonyComponentDebugErrorHandler->handle(8,
'Undefined varia...', '/Users/loalf/Pr...', 9, Array)
#1 {main}
thrown in index.php on line 9
domingo 23 de junio de 13
domingo 23 de junio de 13
#5
Una consola más potente
domingo 23 de junio de 13
Eventos
domingo 23 de junio de 13
domingo 23 de junio de 13
$ php app/console fooCommand
domingo 23 de junio de 13
console.command
$ php app/console fooCommand
domingo 23 de junio de 13
console.command
$ php app/console fooCommand
fooCommand::run()
domingo 23 de junio de 13
console.command
$ php app/console fooCommand
fooCommand::run()
console.exception
domingo 23 de junio de 13
console.command
$ php app/console fooCommand
fooCommand::run()
console.terminate
console.exception
domingo 23 de junio de 13
domingo 23 de junio de 13
Listener.php
domingo 23 de junio de 13
namespace AcmeDemoBundle;
class Listener
{
public function onCommand($event)
{
// código a ejecutar
}
}
Listener.php
domingo 23 de junio de 13
namespace AcmeDemoBundle;
class Listener
{
public function onCommand($event)
{
// código a ejecutar
}
}
Listener.php
domingo 23 de junio de 13
parameters.yml
namespace AcmeDemoBundle;
class Listener
{
public function onCommand($event)
{
// código a ejecutar
}
}
Listener.php
domingo 23 de junio de 13
services:
acme.console.listener:
class: AcmeDemoBundleListener
tags:
-
name: kernel.event_listener
event: console.command
method: onCommand
parameters.yml
namespace AcmeDemoBundle;
class Listener
{
public function onCommand($event)
{
// código a ejecutar
}
}
Listener.php
domingo 23 de junio de 13
Datos tabulados
domingo 23 de junio de 13
+---------------+--------------------------+------------------+
| ISBN | Title | Author |
+---------------+--------------------------+------------------+
| 99921-58-10-7 | Divine Comedy | Dante Alighieri |
| 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens |
| 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien |
| 80-902734-1-6 | And Then There Were None | Agatha Christie |
+---------------+--------------------------+------------------+
domingo 23 de junio de 13
$table = $app->getHelperSet()->get('table');
$table
->setHeaders(array('ISBN', 'Title', 'Author'))
->setRows(array(
array('99921-58-10-7', 'Divine Comedy', 'Dante ...'),
array('9971-5-0210-0', 'A Tale of Two Cities', '...'),
array('960-425-059-0', 'The Lord of the Rings', '...'),
array('80-902734-1-6', 'And Then There Were None', '...'),
))
;
$table->render($output);
domingo 23 de junio de 13
=============== ========================== ==================
ISBN Title Author
=============== ========================== ==================
99921-58-10-7 Divine Comedy Dante Alighieri
9971-5-0210-0 A Tale of Two Cities Charles Dickens
960-425-059-0 The Lord of the Rings J. R. R. Tolkien
80-902734-1-6 And Then There Were None Agatha Christie
=============== ========================== ==================
domingo 23 de junio de 13
$table = $app->getHelperSet()->get('table');
$table
->setHeaders(array('ISBN', 'Title', 'Author'))
->setLayout(TableHelper::LAYOUT_BORDERLESS)
->setRows(array(
array('99921-58-10-7', 'Divine Comedy', 'Dante ...'),
array('9971-5-0210-0', 'A Tale of Two Cities', '...'),
array('960-425-059-0', 'The Lord of the Rings', '...'),
array('80-902734-1-6', 'And Then There Were None', '...'),
))
;
$table->render($output);
->setLayout(TableHelper::LAYOUT_BORDERLESS)
domingo 23 de junio de 13
|···············|··························|··················|
| ISBN | Title | Author |
|···············|··························|··················|
| 99921-58-10-7 | Divine Comedy | Dante Alighieri |
| 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens |
| 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien |
| 80-902734-1-6 | And Then There Were None | Agatha Christie |
|···············|··························|··················|
domingo 23 de junio de 13
$table = $this->getHelperSet()->get('table');
$table
->setHorizontalBorderChar("·")
->setCrossingChar(
"<fg=white;bg=red>|</fg=white;bg=red>"
)
->setVerticalBorderChar(
"<fg=white;bg=red>|</fg=white;bg=red>"
)
;
domingo 23 de junio de 13
#6
Mejor performance
domingo 23 de junio de 13
class HeavyService
{
public function __construct() { sleep(10); }
public function doFoo() { echo “foo”; }
}
domingo 23 de junio de 13
class LightService
{
public function __construct($service)
{
$this->service = $service;
}
public function doFoo() {
$this->service->doFoo();
}
public function doBar() { echo “bar”; }
}
domingo 23 de junio de 13
services:
acme.demo.heavy_service:
class: AcmeDemoBundleHeavyService
acme.demo.light_service:
class: AcmeDemoBundleLightService
arguments: [@acme.demo.heavy_service]
domingo 23 de junio de 13
class DemoController extends Controller
{
$ls = $this->get(‘acme.demo.light_service’);
$ls->doBar();
}
domingo 23 de junio de 13
class DemoController extends Controller
{
$ls = $this->get(‘acme.demo.light_service’);
$ls->doBar();
}
10220ms
domingo 23 de junio de 13
services:
acme.demo.heavy_service:
class: AcmeDemoBundleHeavyService
lazy: true
acme.demo.light_service:
class: AcmeDemoBundleLightService
arguments: [@acme.demo.heavy_service]
domingo 23 de junio de 13
class DemoController extends Controller
{
$ls = $this->get(‘acme.demo.light_service’);
$ls->doBar();
}
domingo 23 de junio de 13
220ms
class DemoController extends Controller
{
$ls = $this->get(‘acme.demo.light_service’);
$ls->doBar();
}
domingo 23 de junio de 13
class DemoController extends Controller
{
$ls = $this->get(‘acme.demo.light_service’);
$ls->doFoo();
}
domingo 23 de junio de 13
10220ms
class DemoController extends Controller
{
$ls = $this->get(‘acme.demo.light_service’);
$ls->doFoo();
}
domingo 23 de junio de 13
composer require ocramius/proxy-manager
domingo 23 de junio de 13
#7
Más validadores
domingo 23 de junio de 13
•Currency
•IBAN - International Bank Account Number
Banca
domingo 23 de junio de 13
• ISBN - International Standard Book Number
•ISSN - International Standard Serial Number
Publicaciones
domingo 23 de junio de 13
•EqualTo
•NotEqualTo
•IdenticalTo
•NotIdenticalTo
Comparación
•LessThan
•LessThanOrEqual
•GreaterThan
•GreaterThanOrEqual
domingo 23 de junio de 13
#8
Más HTML5 compliant
domingo 23 de junio de 13
Mensaje
Nombre
Apellidos
Email
Mi web
Información de contacto
enviar
domingo 23 de junio de 13
Mensaje
Nombre
Apellidos
Email
Mi web
Información de contacto
enviar
<textarea form=mi_form>
domingo 23 de junio de 13
$form = $crawler->selectButton('enviar')
->getForm();
$values = $form->getValues();
$keys = array_keys($values)
2.3<sf
domingo 23 de junio de 13
$form = $crawler->selectButton('enviar')
->getForm();
$values = $form->getValues();
$keys = array_keys($values)
2.3<sf
#'nombre', 'apellidos', 'email'
domingo 23 de junio de 13
$form = $crawler->selectButton('enviar')
->getForm();
$values = $form->getValues();
$keys = array_keys($values)
2.3=sf
domingo 23 de junio de 13
$form = $crawler->selectButton('enviar')
->getForm();
$values = $form->getValues();
$keys = array_keys($values)
2.3=sf
#'nombre', 'apellidos', 'email', 'mensaje'
domingo 23 de junio de 13
#9
Más fácil de usar
domingo 23 de junio de 13
Generación de parameters.yml
domingo 23 de junio de 13
> composer install
Generating autoload files
Creating the "app/config/parameters.yml" file.
Some parameters are missing. Please provide them.
database_driver (pdo_mysql):
database_host (127.0.0.1):
database_port (null):
database_name (symfony):
database_user (root):
database_password (null):
mailer_transport (smtp):
mailer_host (127.0.0.1):
mailer_user (null):
mailer_password (null):
locale (en):
secret (ThisTokenIsNotSoSecretChangeIt):
domingo 23 de junio de 13
#*
Y muchas cosas más
domingo 23 de junio de 13
Que nos esperará en
Symfony 2.4
domingo 23 de junio de 13
Besides the few pull requests that
already target 2.4, I have one topic
that I want us to work on for 2.4:
**performance**
domingo 23 de junio de 13
https://groups.google.com/forum/#!topic/symfony-devs/
rwN1gwuHEC4
domingo 23 de junio de 13
domingo 23 de junio de 13
AdminBundle
domingo 23 de junio de 13
Cache
AdminBundle
domingo 23 de junio de 13
Cache
RAD
AdminBundle
domingo 23 de junio de 13
Cache
RADREST
AdminBundle
domingo 23 de junio de 13
KEEP
CALM
AND
UPGRADE
SYMFONY
domingo 23 de junio de 13
Gracias. ¿Preguntas?
FYI, TimeOut is recruiting
http://joind.in/talk/view/8853
@loalf
domingo 23 de junio de 13

Más contenido relacionado

ODP
Python Segunda Sesion de Clases
PPT
Python Tercera Sesion de Clases
PDF
Groovy no es java sin punto y coma v3
KEY
Workshop Camp México 09 - Introducción a Ruby
PDF
Salud, Noticias Y Articulos | Vida Saludable
TXT
DOCX
Cesar lenguaje c_
PDF
Develop Mobile Apps with Corona SDK
Python Segunda Sesion de Clases
Python Tercera Sesion de Clases
Groovy no es java sin punto y coma v3
Workshop Camp México 09 - Introducción a Ruby
Salud, Noticias Y Articulos | Vida Saludable
Cesar lenguaje c_
Develop Mobile Apps with Corona SDK

Destacado (6)

PPTX
Project kwaliteit en implementatie van vraagsturing
PDF
Projectmanagement
PPT
Presentatie Projectmanagement
PPTX
Projectmanagement workshop feb 2015 - definitief
PPT
Definitieve Ppt Projectmanagement
PPT
Project Management KPIs
Project kwaliteit en implementatie van vraagsturing
Projectmanagement
Presentatie Projectmanagement
Projectmanagement workshop feb 2015 - definitief
Definitieve Ppt Projectmanagement
Project Management KPIs
Publicidad

Similar a Novedades en Symfony 2.3 (20)

PDF
Introducción a Symfony
PDF
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
PDF
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
PDF
(Muy breve) Introduccion a jQuery
PPTX
Microservicios con Quarkus
PDF
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
PDF
ECMAScript 6
PDF
Despliegue de aplicaciones PHP
PDF
55701054 guia-java-en-espanol
DOCX
Air plane
PPT
Modelo Persistente
PDF
Aplicaciones CLI profesionales con Symfony
PPTX
El "peor" lenguaje del mundo
PDF
PHP's FIG and PSRs
PDF
Introducción a Clojure
PDF
Semana 4 Javascript funciones y Metodos
PDF
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
PDF
Manual de programador sistema experto bovino online
PDF
Silex, desarrollo web ágil y profesional con PHP
Introducción a Symfony
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
(Muy breve) Introduccion a jQuery
Microservicios con Quarkus
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
ECMAScript 6
Despliegue de aplicaciones PHP
55701054 guia-java-en-espanol
Air plane
Modelo Persistente
Aplicaciones CLI profesionales con Symfony
El "peor" lenguaje del mundo
PHP's FIG and PSRs
Introducción a Clojure
Semana 4 Javascript funciones y Metodos
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Manual de programador sistema experto bovino online
Silex, desarrollo web ágil y profesional con PHP
Publicidad

Más de Javier López (8)

PDF
Continous Delivering a PHP application
PDF
One commit, one release. Continuously delivering a Symfony project.
PDF
Slides changes symfony23
PDF
Shifting gears with Composer
PDF
Componentes, el arma secreta de Symfony2
PDF
Slides components en
KEY
Slides componentes
ODP
Symfony y Admin Generator
Continous Delivering a PHP application
One commit, one release. Continuously delivering a Symfony project.
Slides changes symfony23
Shifting gears with Composer
Componentes, el arma secreta de Symfony2
Slides components en
Slides componentes
Symfony y Admin Generator

Último (20)

PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PDF
Calidad desde el Docente y la mejora continua .pdf
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PDF
clase auditoria informatica 2025.........
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PDF
Diapositiva proyecto de vida, materia catedra
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PDF
SAP Transportation Management para LSP, TM140 Col18
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
taller de informática - LEY DE OHM
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PPT
introduccion a las_web en el 2025_mejoras.ppt
Presentación PASANTIAS AuditorioOO..pptx
Propuesta BKP servidores con Acronis1.pptx
Sesion 1 de microsoft power point - Clase 1
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
Calidad desde el Docente y la mejora continua .pdf
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
clase auditoria informatica 2025.........
Plantilla para Diseño de Narrativas Transmedia.pdf
Diapositiva proyecto de vida, materia catedra
Power Point Nicolás Carrasco (disertación Roblox).pptx
SAP Transportation Management para LSP, TM140 Col18
CyberOps Associate - Cisco Networking Academy
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
REDES INFORMATICAS REDES INFORMATICAS.pptx
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
El-Gobierno-Electrónico-En-El-Estado-Bolivia
taller de informática - LEY DE OHM
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
introduccion a las_web en el 2025_mejoras.ppt

Novedades en Symfony 2.3