Novedades en Symfony 2.3

2,193 views

Published on

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.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,193
On SlideShare
0
From Embeds
0
Number of Embeds
1,030
Actions
Shares
0
Downloads
32
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Novedades en Symfony 2.3

  1. 1. domingo 23 de junio de 13
  2. 2. ¡muchas gracias a nuestrospatrocinadores!deSymfonydomingo 23 de junio de 13
  3. 3. Quién soydomingo 23 de junio de 13
  4. 4. Nací en CórdobaTrabajo en LondresJavier Lópezdomingo 23 de junio de 13
  5. 5. He trabajadoIPC Media y Sensio Labs UKTrabajo como Lead EngineerTimeOutOrganizodeSymfonydomingo 23 de junio de 13
  6. 6. Razones para pasarse aSymfony 2.3domingo 23 de junio de 13
  7. 7. #1Estabilidad para productosy empresasdomingo 23 de junio de 13
  8. 8. 2012 2013 2014 2015 2016 20172.02.12.22.32.42.52.62.7EstabilizaciónMantenimientoDesarrollodomingo 23 de junio de 13
  9. 9. 2012 2013 2014 2015 2016 20172.02.12.22.32.42.52.62.7EstabilizaciónMantenimientoDesarrolloPrimera LTS de la era 2.xdomingo 23 de junio de 13
  10. 10. 2012 2013 2014 2015 2016 20172.02.12.22.32.42.52.62.7EstabilizaciónMantenimientoDesarrolloPrimera LTS de la era 2.xBackwards compatibilitydomingo 23 de junio de 13
  11. 11. #2Arquitectura másdesacopladadomingo 23 de junio de 13
  12. 12. BrowserKitFinderLocaleRoutingClassLoader Config Console CssSelectorDI DomCrawler EventDispatcher FilesystemForm HttpFoundation HttpKernelProcessSecurity Serializer TemplatingTranslation ValidatorYaml22 componentes2.0domingo 23 de junio de 13
  13. 13. BrowserKitFinderLocaleRoutingClassLoader Config Console CssSelectorDI DomCrawler EventDispatcher FilesystemForm HttpFoundation HttpKernelOptionsResolver ProcessSecurity Serializer TemplatingTranslation ValidatorYaml23 componentes2.12.0domingo 23 de junio de 13
  14. 14. BrowserKitFinderLocaleRoutingClassLoader Config Console CssSelectorDI DomCrawler EventDispatcher FilesystemForm HttpFoundation HttpKernelOptionsResolver Process PropertyAccessSecurity Serializer Stopwatch TemplatingTranslation ValidatorYaml25 componentes2.22.12.0domingo 23 de junio de 13
  15. 15. BrowserKitDebugFinderLocaleRoutingClassLoader Config Console CssSelectorDI DomCrawler EventDispatcher FilesystemForm HttpFoundation HttpKernel IntlOptionsResolver Process PropertyAccessSecurity Serializer Stopwatch TemplatingTranslation ValidatorYaml2.3 27 componentes2.22.12.0domingo 23 de junio de 13
  16. 16. #3Más documentacióndomingo 23 de junio de 13
  17. 17. 2.02010951BookCookbook2.12011858Componentes20120632.220123682.3# páginasdomingo 23 de junio de 13
  18. 18. #4Más fácil de depurardomingo 23 de junio de 13
  19. 19. 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 # -vvvdomingo 23 de junio de 13
  20. 20. 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
  21. 21. parámetros de configuración$ console container:debug --parameters$ console container:debug --parameter=kernel.debugdomingo 23 de junio de 13
  22. 22. stack trace en texto planodomingo 23 de junio de 13
  23. 23. 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 SymfonyComponentRoutingRouteDefaults _controller: AcmeDemoBundleControllerDemoController::helloActionRequirements NO CUSTOMOptions compiler_class: SymfonyComponentRoutingRouteCompilerPath-Regex #^/demo/hello/(?P<name>[^/]++)$#sdomingo 23 de junio de 13
  24. 24. Componente Debugdomingo 23 de junio de 13
  25. 25. echo $foodomingo 23 de junio de 13
  26. 26. Notice: Undefined variable: foo inindex.php on line 1domingo 23 de junio de 13
  27. 27. use SymfonyComponentDebugDebug;Debug::$enable();echo $foo;domingo 23 de junio de 13
  28. 28. PHP Fatal error: Uncaught exception SymfonyComponentDebugExceptionContextErrorException with message Notice: Undefinedvariable: foo in index.php line 9 in index.php:9Stack trace:#0 index.php(9): SymfonyComponentDebugErrorHandler->handle(8,Undefined varia..., /Users/loalf/Pr..., 9, Array)#1 {main}thrown in index.php on line 9domingo 23 de junio de 13
  29. 29. domingo 23 de junio de 13
  30. 30. #5Una consola más potentedomingo 23 de junio de 13
  31. 31. Eventosdomingo 23 de junio de 13
  32. 32. domingo 23 de junio de 13
  33. 33. $ php app/console fooCommanddomingo 23 de junio de 13
  34. 34. console.command$ php app/console fooCommanddomingo 23 de junio de 13
  35. 35. console.command$ php app/console fooCommandfooCommand::run()domingo 23 de junio de 13
  36. 36. console.command$ php app/console fooCommandfooCommand::run()console.exceptiondomingo 23 de junio de 13
  37. 37. console.command$ php app/console fooCommandfooCommand::run()console.terminateconsole.exceptiondomingo 23 de junio de 13
  38. 38. domingo 23 de junio de 13
  39. 39. Listener.phpdomingo 23 de junio de 13
  40. 40. namespace AcmeDemoBundle;class Listener{public function onCommand($event){// código a ejecutar}}Listener.phpdomingo 23 de junio de 13
  41. 41. namespace AcmeDemoBundle;class Listener{public function onCommand($event){// código a ejecutar}}Listener.phpdomingo 23 de junio de 13
  42. 42. parameters.ymlnamespace AcmeDemoBundle;class Listener{public function onCommand($event){// código a ejecutar}}Listener.phpdomingo 23 de junio de 13
  43. 43. services:acme.console.listener:class: AcmeDemoBundleListenertags:-name: kernel.event_listenerevent: console.commandmethod: onCommandparameters.ymlnamespace AcmeDemoBundle;class Listener{public function onCommand($event){// código a ejecutar}}Listener.phpdomingo 23 de junio de 13
  44. 44. Datos tabuladosdomingo 23 de junio de 13
  45. 45. +---------------+--------------------------+------------------+| 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
  46. 46. $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
  47. 47. =============== ========================== ==================ISBN Title Author=============== ========================== ==================99921-58-10-7 Divine Comedy Dante Alighieri9971-5-0210-0 A Tale of Two Cities Charles Dickens960-425-059-0 The Lord of the Rings J. R. R. Tolkien80-902734-1-6 And Then There Were None Agatha Christie=============== ========================== ==================domingo 23 de junio de 13
  48. 48. $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
  49. 49. |···············|··························|··················|| 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
  50. 50. $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
  51. 51. #6Mejor performancedomingo 23 de junio de 13
  52. 52. class HeavyService{public function __construct() { sleep(10); }public function doFoo() { echo “foo”; }}domingo 23 de junio de 13
  53. 53. 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
  54. 54. services:acme.demo.heavy_service:class: AcmeDemoBundleHeavyServiceacme.demo.light_service:class: AcmeDemoBundleLightServicearguments: [@acme.demo.heavy_service]domingo 23 de junio de 13
  55. 55. class DemoController extends Controller{$ls = $this->get(‘acme.demo.light_service’);$ls->doBar();}domingo 23 de junio de 13
  56. 56. class DemoController extends Controller{$ls = $this->get(‘acme.demo.light_service’);$ls->doBar();}10220msdomingo 23 de junio de 13
  57. 57. services:acme.demo.heavy_service:class: AcmeDemoBundleHeavyServicelazy: trueacme.demo.light_service:class: AcmeDemoBundleLightServicearguments: [@acme.demo.heavy_service]domingo 23 de junio de 13
  58. 58. class DemoController extends Controller{$ls = $this->get(‘acme.demo.light_service’);$ls->doBar();}domingo 23 de junio de 13
  59. 59. 220msclass DemoController extends Controller{$ls = $this->get(‘acme.demo.light_service’);$ls->doBar();}domingo 23 de junio de 13
  60. 60. class DemoController extends Controller{$ls = $this->get(‘acme.demo.light_service’);$ls->doFoo();}domingo 23 de junio de 13
  61. 61. 10220msclass DemoController extends Controller{$ls = $this->get(‘acme.demo.light_service’);$ls->doFoo();}domingo 23 de junio de 13
  62. 62. composer require ocramius/proxy-managerdomingo 23 de junio de 13
  63. 63. #7Más validadoresdomingo 23 de junio de 13
  64. 64. •Currency•IBAN - International Bank Account NumberBancadomingo 23 de junio de 13
  65. 65. • ISBN - International Standard Book Number•ISSN - International Standard Serial NumberPublicacionesdomingo 23 de junio de 13
  66. 66. •EqualTo•NotEqualTo•IdenticalTo•NotIdenticalToComparación•LessThan•LessThanOrEqual•GreaterThan•GreaterThanOrEqualdomingo 23 de junio de 13
  67. 67. #8Más HTML5 compliantdomingo 23 de junio de 13
  68. 68. MensajeNombreApellidosEmailMi webInformación de contactoenviardomingo 23 de junio de 13
  69. 69. MensajeNombreApellidosEmailMi webInformación de contactoenviar<textarea form=mi_form>domingo 23 de junio de 13
  70. 70. $form = $crawler->selectButton(enviar)->getForm();$values = $form->getValues();$keys = array_keys($values)2.3<sfdomingo 23 de junio de 13
  71. 71. $form = $crawler->selectButton(enviar)->getForm();$values = $form->getValues();$keys = array_keys($values)2.3<sf#nombre, apellidos, emaildomingo 23 de junio de 13
  72. 72. $form = $crawler->selectButton(enviar)->getForm();$values = $form->getValues();$keys = array_keys($values)2.3=sfdomingo 23 de junio de 13
  73. 73. $form = $crawler->selectButton(enviar)->getForm();$values = $form->getValues();$keys = array_keys($values)2.3=sf#nombre, apellidos, email, mensajedomingo 23 de junio de 13
  74. 74. #9Más fácil de usardomingo 23 de junio de 13
  75. 75. Generación de parameters.ymldomingo 23 de junio de 13
  76. 76. > composer installGenerating 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
  77. 77. #*Y muchas cosas másdomingo 23 de junio de 13
  78. 78. Que nos esperará enSymfony 2.4domingo 23 de junio de 13
  79. 79. Besides the few pull requests thatalready target 2.4, I have one topicthat I want us to work on for 2.4:**performance**domingo 23 de junio de 13
  80. 80. https://groups.google.com/forum/#!topic/symfony-devs/rwN1gwuHEC4domingo 23 de junio de 13
  81. 81. domingo 23 de junio de 13
  82. 82. AdminBundledomingo 23 de junio de 13
  83. 83. CacheAdminBundledomingo 23 de junio de 13
  84. 84. CacheRADAdminBundledomingo 23 de junio de 13
  85. 85. CacheRADRESTAdminBundledomingo 23 de junio de 13
  86. 86. KEEPCALMANDUPGRADESYMFONYdomingo 23 de junio de 13
  87. 87. Gracias. ¿Preguntas?FYI, TimeOut is recruitinghttp://joind.in/talk/view/8853@loalfdomingo 23 de junio de 13

×