novedades en symfony 2.3

87
domingo 23 de junio de 13

Upload: javier-lopez

Post on 23-Jun-2015

1.777 views

Category:

Technology


1 download

DESCRIPTION

El ritmo de desarrollo de Symfony es tan alto que en muchas ocasiones cuesta estar al corriente de todo lo que está ocurriendo en el proyecto. A lo largo de la charla se presentarán las novedades que están por venir en Symfony 2.3.

TRANSCRIPT

Page 1: Novedades en Symfony 2.3

domingo 23 de junio de 13

Page 2: Novedades en Symfony 2.3

¡muchas gracias a nuestros patrocinadores!

deSymfonydomingo 23 de junio de 13

Page 3: Novedades en Symfony 2.3

Quién soy

domingo 23 de junio de 13

Page 4: Novedades en Symfony 2.3

Nací en Córdoba

Trabajo en Londres

Javier López

domingo 23 de junio de 13

Page 5: Novedades en Symfony 2.3

He trabajadoIPC Media y Sensio Labs UK

Trabajo como Lead Engineer

TimeOutOrganizo

deSymfony

domingo 23 de junio de 13

Page 6: Novedades en Symfony 2.3

Razones para pasarse a Symfony 2.3

domingo 23 de junio de 13

Page 7: Novedades en Symfony 2.3

#1

Estabilidad para productos y empresas

domingo 23 de junio de 13

Page 8: Novedades en Symfony 2.3

2012 2013 2014 2015 2016 2017

2.0

2.1

2.2

2.3

2.4

2.5

2.6

2.7EstabilizaciónMantenimiento

Desarrollo

domingo 23 de junio de 13

Page 9: Novedades en Symfony 2.3

2012 2013 2014 2015 2016 2017

2.0

2.1

2.2

2.3

2.4

2.5

2.6

2.7EstabilizaciónMantenimiento

Desarrollo

Primera LTS de la era 2.x

domingo 23 de junio de 13

Page 10: Novedades en Symfony 2.3

2012 2013 2014 2015 2016 2017

2.0

2.1

2.2

2.3

2.4

2.5

2.6

2.7EstabilizaciónMantenimiento

Desarrollo

Primera LTS de la era 2.x

Backwards compatibility

domingo 23 de junio de 13

Page 11: Novedades en Symfony 2.3

#2

Arquitectura más desacoplada

domingo 23 de junio de 13

Page 12: Novedades en Symfony 2.3

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

Page 13: Novedades en Symfony 2.3

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

Page 14: Novedades en Symfony 2.3

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

Page 15: Novedades en Symfony 2.3

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

Page 16: Novedades en Symfony 2.3

#3

Más documentación

domingo 23 de junio de 13

Page 17: Novedades en Symfony 2.3

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

Page 18: Novedades en Symfony 2.3

#4

Más fácil de depurar

domingo 23 de junio de 13

Page 19: Novedades en Symfony 2.3

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

Page 20: Novedades en Symfony 2.3

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

Page 21: Novedades en Symfony 2.3

parámetros de configuración

$ console container:debug --parameters

$ console container:debug --parameter=kernel.debug

domingo 23 de junio de 13

Page 22: Novedades en Symfony 2.3

stack trace en texto plano

domingo 23 de junio de 13

Page 23: Novedades en Symfony 2.3

más información en router:match

$ php app/console router:match /demo/hello/fabienRoute "_demo_hello" matches

[router] Route "_demo_hello"Name _demo_helloPath /demo/hello/{name}Host ANYScheme ANYMethod ANYClass Symfony\Component\Routing\RouteDefaults _controller: Acme\DemoBundle\Controller\DemoController::helloActionRequirements NO CUSTOMOptions compiler_class: Symfony\Component\Routing\RouteCompilerPath-Regex #^/demo/hello/(?P<name>[^/]++)$#s

domingo 23 de junio de 13

Page 24: Novedades en Symfony 2.3

Componente Debug

domingo 23 de junio de 13

Page 25: Novedades en Symfony 2.3

echo $foo

domingo 23 de junio de 13

Page 26: Novedades en Symfony 2.3

Notice: Undefined variable: foo in index.php on line 1

domingo 23 de junio de 13

Page 27: Novedades en Symfony 2.3

use Symfony\Component\Debug\Debug;

Debug::$enable();

echo $foo;

domingo 23 de junio de 13

Page 28: Novedades en Symfony 2.3

PHP Fatal error: Uncaught exception 'Symfony\Component\Debug\Exception\ContextErrorException' with message 'Notice: Undefined variable: foo in index.php line 9' in index.php:9

Stack trace:#0 index.php(9): Symfony\Component\Debug\ErrorHandler->handle(8, 'Undefined varia...', '/Users/loalf/Pr...', 9, Array)#1 {main} thrown in index.php on line 9

domingo 23 de junio de 13

Page 29: Novedades en Symfony 2.3

domingo 23 de junio de 13

Page 30: Novedades en Symfony 2.3

#5

Una consola más potente

domingo 23 de junio de 13

Page 31: Novedades en Symfony 2.3

Eventos

domingo 23 de junio de 13

Page 32: Novedades en Symfony 2.3

domingo 23 de junio de 13

Page 33: Novedades en Symfony 2.3

$ php app/console fooCommand

domingo 23 de junio de 13

Page 34: Novedades en Symfony 2.3

console.command

$ php app/console fooCommand

domingo 23 de junio de 13

Page 35: Novedades en Symfony 2.3

console.command

$ php app/console fooCommand

fooCommand::run()

domingo 23 de junio de 13

Page 36: Novedades en Symfony 2.3

console.command

$ php app/console fooCommand

fooCommand::run()

console.exception

domingo 23 de junio de 13

Page 37: Novedades en Symfony 2.3

console.command

$ php app/console fooCommand

fooCommand::run()

console.terminate

console.exception

domingo 23 de junio de 13

Page 38: Novedades en Symfony 2.3

domingo 23 de junio de 13

Page 39: Novedades en Symfony 2.3

Listener.php

domingo 23 de junio de 13

Page 40: Novedades en Symfony 2.3

namespace Acme\DemoBundle;

class Listener{ public function onCommand($event) { // código a ejecutar }}

Listener.php

domingo 23 de junio de 13

Page 41: Novedades en Symfony 2.3

namespace Acme\DemoBundle;

class Listener{ public function onCommand($event) { // código a ejecutar }}

Listener.php

domingo 23 de junio de 13

Page 42: Novedades en Symfony 2.3

parameters.yml

namespace Acme\DemoBundle;

class Listener{ public function onCommand($event) { // código a ejecutar }}

Listener.php

domingo 23 de junio de 13

Page 43: Novedades en Symfony 2.3

services: acme.console.listener: class: Acme\DemoBundle\Listener tags: - name: kernel.event_listener event: console.command method: onCommand

parameters.yml

namespace Acme\DemoBundle;

class Listener{ public function onCommand($event) { // código a ejecutar }}

Listener.php

domingo 23 de junio de 13

Page 44: Novedades en Symfony 2.3

Datos tabulados

domingo 23 de junio de 13

Page 45: Novedades en Symfony 2.3

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

Page 46: Novedades en Symfony 2.3

$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

Page 47: Novedades en Symfony 2.3

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

Page 48: Novedades en Symfony 2.3

$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

Page 49: Novedades en Symfony 2.3

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

Page 50: Novedades en Symfony 2.3

$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

Page 51: Novedades en Symfony 2.3

#6

Mejor performance

domingo 23 de junio de 13

Page 52: Novedades en Symfony 2.3

class HeavyService{

public function __construct() { sleep(10); }

public function doFoo() { echo “foo”; }

}

domingo 23 de junio de 13

Page 53: Novedades en Symfony 2.3

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

Page 54: Novedades en Symfony 2.3

services: acme.demo.heavy_service: class: Acme\DemoBundle\HeavyService

acme.demo.light_service: class: Acme\DemoBundle\LightService arguments: [@acme.demo.heavy_service]

domingo 23 de junio de 13

Page 55: Novedades en Symfony 2.3

class DemoController extends Controller{ $ls = $this->get(‘acme.demo.light_service’); $ls->doBar();}

domingo 23 de junio de 13

Page 56: Novedades en Symfony 2.3

class DemoController extends Controller{ $ls = $this->get(‘acme.demo.light_service’); $ls->doBar();}

10220ms

domingo 23 de junio de 13

Page 57: Novedades en Symfony 2.3

services: acme.demo.heavy_service: class: Acme\DemoBundle\HeavyService lazy: true

acme.demo.light_service: class: Acme\DemoBundle\LightService arguments: [@acme.demo.heavy_service]

domingo 23 de junio de 13

Page 58: Novedades en Symfony 2.3

class DemoController extends Controller{ $ls = $this->get(‘acme.demo.light_service’); $ls->doBar();}

domingo 23 de junio de 13

Page 59: Novedades en Symfony 2.3

220ms

class DemoController extends Controller{ $ls = $this->get(‘acme.demo.light_service’); $ls->doBar();}

domingo 23 de junio de 13

Page 60: Novedades en Symfony 2.3

class DemoController extends Controller{ $ls = $this->get(‘acme.demo.light_service’); $ls->doFoo();}

domingo 23 de junio de 13

Page 61: Novedades en Symfony 2.3

10220ms

class DemoController extends Controller{ $ls = $this->get(‘acme.demo.light_service’); $ls->doFoo();}

domingo 23 de junio de 13

Page 62: Novedades en Symfony 2.3

composer require ocramius/proxy-manager

domingo 23 de junio de 13

Page 63: Novedades en Symfony 2.3

#7

Más validadores

domingo 23 de junio de 13

Page 64: Novedades en Symfony 2.3

•Currency

•IBAN - International Bank Account Number

Banca

domingo 23 de junio de 13

Page 65: Novedades en Symfony 2.3

• ISBN - International Standard Book Number

•ISSN - International Standard Serial Number

Publicaciones

domingo 23 de junio de 13

Page 66: Novedades en Symfony 2.3

•EqualTo

•NotEqualTo

•IdenticalTo

•NotIdenticalTo

Comparación

•LessThan

•LessThanOrEqual

•GreaterThan

•GreaterThanOrEqual

domingo 23 de junio de 13

Page 67: Novedades en Symfony 2.3

#8

Más HTML5 compliant

domingo 23 de junio de 13

Page 68: Novedades en Symfony 2.3

Mensaje

Nombre

Apellidos

Email

Mi web

Información de contacto

enviar

domingo 23 de junio de 13

Page 69: Novedades en Symfony 2.3

Mensaje

Nombre

Apellidos

Email

Mi web

Información de contacto

enviar

<textarea form=mi_form>

domingo 23 de junio de 13

Page 70: Novedades en Symfony 2.3

$form = $crawler->selectButton('enviar') ->getForm();

$values = $form->getValues(); $keys = array_keys($values)

2.3<sf

domingo 23 de junio de 13

Page 71: Novedades en Symfony 2.3

$form = $crawler->selectButton('enviar') ->getForm();

$values = $form->getValues(); $keys = array_keys($values)

2.3<sf

#'nombre', 'apellidos', 'email'

domingo 23 de junio de 13

Page 72: Novedades en Symfony 2.3

$form = $crawler->selectButton('enviar') ->getForm();

$values = $form->getValues(); $keys = array_keys($values)

2.3=sf

domingo 23 de junio de 13

Page 73: Novedades en Symfony 2.3

$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

Page 74: Novedades en Symfony 2.3

#9

Más fácil de usar

domingo 23 de junio de 13

Page 75: Novedades en Symfony 2.3

Generación de parameters.yml

domingo 23 de junio de 13

Page 76: Novedades en Symfony 2.3

> composer install

Generating autoload filesCreating 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

Page 77: Novedades en Symfony 2.3

#*

Y muchas cosas más

domingo 23 de junio de 13

Page 78: Novedades en Symfony 2.3

Que nos esperará enSymfony 2.4

domingo 23 de junio de 13

Page 79: Novedades en Symfony 2.3

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

Page 81: Novedades en Symfony 2.3

domingo 23 de junio de 13

Page 82: Novedades en Symfony 2.3

AdminBundle

domingo 23 de junio de 13

Page 83: Novedades en Symfony 2.3

CacheAdminBundle

domingo 23 de junio de 13

Page 84: Novedades en Symfony 2.3

Cache

RAD

AdminBundle

domingo 23 de junio de 13

Page 85: Novedades en Symfony 2.3

Cache

RADREST

AdminBundle

domingo 23 de junio de 13

Page 86: Novedades en Symfony 2.3

KEEPCALM

AND

UPGRADESYMFONY

domingo 23 de junio de 13

Page 87: Novedades en Symfony 2.3

Gracias. ¿Preguntas?FYI, TimeOut is recruiting

http://joind.in/talk/view/8853

@loalf

domingo 23 de junio de 13