novedades en symfony 2.3

Post on 23-Jun-2015

1.782 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

domingo 23 de junio de 13

¡muchas gracias a nuestros patrocinadores!

deSymfonydomingo 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 trabajadoIPC Media y Sensio Labs UK

Trabajo como Lead Engineer

TimeOutOrganizo

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.7EstabilizaciónMantenimiento

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.7EstabilizaciónMantenimiento

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.7EstabilizaciónMantenimiento

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

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 Symfony\Component\Debug\Debug;

Debug::$enable();

echo $foo;

domingo 23 de junio de 13

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

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 Acme\DemoBundle;

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

Listener.php

domingo 23 de junio de 13

namespace Acme\DemoBundle;

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

Listener.php

domingo 23 de junio de 13

parameters.yml

namespace Acme\DemoBundle;

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

Listener.php

domingo 23 de junio de 13

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

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: Acme\DemoBundle\HeavyService

acme.demo.light_service: class: Acme\DemoBundle\LightService 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: Acme\DemoBundle\HeavyService lazy: true

acme.demo.light_service: class: Acme\DemoBundle\LightService 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 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

#*

Y muchas cosas más

domingo 23 de junio de 13

Que nos esperará enSymfony 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

domingo 23 de junio de 13

AdminBundle

domingo 23 de junio de 13

CacheAdminBundle

domingo 23 de junio de 13

Cache

RAD

AdminBundle

domingo 23 de junio de 13

Cache

RADREST

AdminBundle

domingo 23 de junio de 13

KEEPCALM

AND

UPGRADESYMFONY

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

top related