Post on 23-Jun-2015
description
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
Mi web
Información de contacto
enviar
domingo 23 de junio de 13
Mensaje
Nombre
Apellidos
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
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
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