Slides changes symfony23

86
martes 25 de junio de 13

Transcript of Slides changes symfony23

Page 1: Slides changes symfony23

martes 25 de junio de 13

Page 2: Slides changes symfony23

Who am I

martes 25 de junio de 13

Page 3: Slides changes symfony23

I was born in Córdoba

I work in London

Javier López

martes 25 de junio de 13

Page 4: Slides changes symfony23

I’ve workedIPC Media y Sensio Labs UK

I work at

TimeOutI organize

deSymfony

martes 25 de junio de 13

Page 5: Slides changes symfony23

Reasons to upgrade to Symfony 2.3

martes 25 de junio de 13

Page 6: Slides changes symfony23

#1

Stable for products and companies

martes 25 de junio de 13

Page 7: Slides changes symfony23

2012 2013 2014 2015 2016 2017

2.0

2.1

2.2

2.3

2.4

2.5

2.6

2.7StabilisationMaintenance

Development

martes 25 de junio de 13

Page 8: Slides changes symfony23

2012 2013 2014 2015 2016 2017

2.0

2.1

2.2

2.3

2.4

2.5

2.6

2.7EstabilizaciónMantenimiento

Desarrollo

First LTS of the 2.x era

martes 25 de junio de 13

Page 9: Slides changes symfony23

2012 2013 2014 2015 2016 2017

2.0

2.1

2.2

2.3

2.4

2.5

2.6

2.7EstabilizaciónMantenimiento

Desarrollo

Backwards compatibility

First LTS of the 2.x era

martes 25 de junio de 13

Page 10: Slides changes symfony23

#2

Less coupled architecture

martes 25 de junio de 13

Page 11: Slides changes symfony23

BrowserKit

Finder

Locale

Routing

ClassLoader Config Console CssSelector

DI DomCrawler EventDispatcher Filesystem

Form HttpFoundation HttpKernel

Process

Security Serializer Templating

Translation Validator

Yaml

22 components2.0

martes 25 de junio de 13

Page 12: Slides changes symfony23

BrowserKit

Finder

Locale

Routing

ClassLoader Config Console CssSelector

DI DomCrawler EventDispatcher Filesystem

Form HttpFoundation HttpKernel

OptionsResolver Process

Security Serializer Templating

Translation Validator

Yaml

23 components2.12.0

martes 25 de junio de 13

Page 13: Slides changes symfony23

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 components2.22.12.0

martes 25 de junio de 13

Page 14: Slides changes symfony23

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 components2.22.12.0

martes 25 de junio de 13

Page 15: Slides changes symfony23

#3

More documentation

martes 25 de junio de 13

Page 16: Slides changes symfony23

2.0

20

109

51

Book

Cookbook

2.1

20

118

58

Components

20

120

63

2.2

20

123

68

2.3

# pages

martes 25 de junio de 13

Page 17: Slides changes symfony23

#4

Easier to debug

martes 25 de junio de 13

Page 18: Slides changes symfony23

More levels of verbosity

$ php app/console foo --verbose=1 # -v $ php app/console foo --verbose=2 # -vv $ php app/console foo --verbose=3 # -vvv

martes 25 de junio de 13

Page 19: Slides changes symfony23

class MyCommand extends Command{ protected function execute($input, $output) { $verbosity = $output->getVerbosity();

if ($verbosity === OutputInterface::VERBOSITY_VERBOSE) { $output->writeln("Information"); }

if ($verbosity === OutputInterface::VERBOSITY_VERY_VERBOSE) { $output->writeln("More information"); }

if ($verbosity === OutputInterface::VERBOSITY_DEBUG) { $output->writeln("Even more information"); }}

martes 25 de junio de 13

Page 20: Slides changes symfony23

configuration parameters

$ console container:debug --parameters

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

martes 25 de junio de 13

Page 21: Slides changes symfony23

stack trace en plain text

martes 25 de junio de 13

Page 22: Slides changes symfony23

more information in 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

martes 25 de junio de 13

Page 23: Slides changes symfony23

Debug component

martes 25 de junio de 13

Page 24: Slides changes symfony23

echo $foo

martes 25 de junio de 13

Page 25: Slides changes symfony23

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

martes 25 de junio de 13

Page 26: Slides changes symfony23

use Symfony\Component\Debug\Debug;

Debug::$enable();

echo $foo;

martes 25 de junio de 13

Page 27: Slides changes symfony23

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

martes 25 de junio de 13

Page 28: Slides changes symfony23

martes 25 de junio de 13

Page 29: Slides changes symfony23

#5

A mightier console

martes 25 de junio de 13

Page 30: Slides changes symfony23

Events

martes 25 de junio de 13

Page 31: Slides changes symfony23

martes 25 de junio de 13

Page 32: Slides changes symfony23

$ php app/console fooCommand

martes 25 de junio de 13

Page 33: Slides changes symfony23

console.command

$ php app/console fooCommand

martes 25 de junio de 13

Page 34: Slides changes symfony23

console.command

$ php app/console fooCommand

fooCommand::run()

martes 25 de junio de 13

Page 35: Slides changes symfony23

console.command

$ php app/console fooCommand

fooCommand::run()

console.exception

martes 25 de junio de 13

Page 36: Slides changes symfony23

console.command

$ php app/console fooCommand

fooCommand::run()

console.terminate

console.exception

martes 25 de junio de 13

Page 37: Slides changes symfony23

martes 25 de junio de 13

Page 38: Slides changes symfony23

Listener.php

martes 25 de junio de 13

Page 39: Slides changes symfony23

namespace Acme\DemoBundle;

class Listener{ public function onCommand($event) { // your code }}

Listener.php

martes 25 de junio de 13

Page 40: Slides changes symfony23

namespace Acme\DemoBundle;

class Listener{ public function onCommand($event) { // your code }}

Listener.php

martes 25 de junio de 13

Page 41: Slides changes symfony23

parameters.yml

namespace Acme\DemoBundle;

class Listener{ public function onCommand($event) { // your code }}

Listener.php

martes 25 de junio de 13

Page 42: Slides changes symfony23

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) { // your code }}

Listener.php

martes 25 de junio de 13

Page 43: Slides changes symfony23

tables

martes 25 de junio de 13

Page 44: Slides changes symfony23

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

martes 25 de junio de 13

Page 45: Slides changes symfony23

$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);

martes 25 de junio de 13

Page 46: Slides changes symfony23

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

martes 25 de junio de 13

Page 47: Slides changes symfony23

$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)

martes 25 de junio de 13

Page 48: Slides changes symfony23

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

martes 25 de junio de 13

Page 49: Slides changes symfony23

$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>" );

martes 25 de junio de 13

Page 50: Slides changes symfony23

#6

Better performance

martes 25 de junio de 13

Page 51: Slides changes symfony23

class HeavyService{

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

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

}

martes 25 de junio de 13

Page 52: Slides changes symfony23

class LightService{

public function __construct($service) { $this->service = $service; }

public function doFoo() { $this->service->doFoo(); }

public function doBar() { echo “bar”; }

}

martes 25 de junio de 13

Page 53: Slides changes symfony23

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

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

martes 25 de junio de 13

Page 54: Slides changes symfony23

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

martes 25 de junio de 13

Page 55: Slides changes symfony23

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

10220ms

martes 25 de junio de 13

Page 56: Slides changes symfony23

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

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

martes 25 de junio de 13

Page 57: Slides changes symfony23

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

martes 25 de junio de 13

Page 58: Slides changes symfony23

220ms

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

martes 25 de junio de 13

Page 59: Slides changes symfony23

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

martes 25 de junio de 13

Page 60: Slides changes symfony23

10220ms

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

martes 25 de junio de 13

Page 61: Slides changes symfony23

composer require ocramius/proxy-manager

martes 25 de junio de 13

Page 62: Slides changes symfony23

#7

More validators

martes 25 de junio de 13

Page 63: Slides changes symfony23

•Currency

•IBAN - International Bank Account Number

Banking

martes 25 de junio de 13

Page 64: Slides changes symfony23

• ISBN - International Standard Book Number

•ISSN - International Standard Serial Number

Publications

martes 25 de junio de 13

Page 65: Slides changes symfony23

•EqualTo

•NotEqualTo

•IdenticalTo

•NotIdenticalTo

Comparison

•LessThan

•LessThanOrEqual

•GreaterThan

•GreaterThanOrEqual

martes 25 de junio de 13

Page 66: Slides changes symfony23

#8

More HTML5 compliant

martes 25 de junio de 13

Page 67: Slides changes symfony23

Message

Name

Surname

Email

Burritos web

Andele. Contactanos.

send

martes 25 de junio de 13

Page 68: Slides changes symfony23

Message

Name

Surname

Email

Burritos web

Andele. Contactanos.

send

<textarea form=my_form>

martes 25 de junio de 13

Page 69: Slides changes symfony23

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

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

2.3<sf

martes 25 de junio de 13

Page 70: Slides changes symfony23

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

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

2.3<sf

#'name', 'surname', 'email'

martes 25 de junio de 13

Page 71: Slides changes symfony23

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

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

2.3=sf

martes 25 de junio de 13

Page 72: Slides changes symfony23

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

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

2.3=sf

#'name', 'surname', 'email', 'message'

martes 25 de junio de 13

Page 73: Slides changes symfony23

#9

Easier to use

martes 25 de junio de 13

Page 74: Slides changes symfony23

parameters.yml generation

martes 25 de junio de 13

Page 75: Slides changes symfony23

> 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):

martes 25 de junio de 13

Page 76: Slides changes symfony23

#*

And even more things

martes 25 de junio de 13

Page 77: Slides changes symfony23

What we will see inSymfony 2.4

martes 25 de junio de 13

Page 78: Slides changes symfony23

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

martes 25 de junio de 13

Page 80: Slides changes symfony23

martes 25 de junio de 13

Page 81: Slides changes symfony23

AdminBundle

martes 25 de junio de 13

Page 82: Slides changes symfony23

CacheAdminBundle

martes 25 de junio de 13

Page 83: Slides changes symfony23

Cache

RAD

AdminBundle

martes 25 de junio de 13

Page 84: Slides changes symfony23

Cache

RADREST

AdminBundle

martes 25 de junio de 13

Page 85: Slides changes symfony23

KEEPCALM

AND

UPGRADESYMFONY

martes 25 de junio de 13

Page 86: Slides changes symfony23

Thanks. Questions?FYI, TimeOut is recruiting

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

@loalf

martes 25 de junio de 13