Symfony2, Jornadas Symfony

7,495 views
7,345 views

Published on

Esta presentación es la versión simplificada de la que se utilizó en las primeras Jornadas Symfony. Puedes ver la grabación en vídeo de la presentación original en http://bit.ly/symfony2

- - - - - - -


This is the simplified version of the presentation used at the first Spanish Symfony Conference. You can watch the video recording of the original presentation at http://bit.ly/symfony2

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,495
On SlideShare
0
From Embeds
0
Number of Embeds
1,244
Actions
Shares
0
Downloads
189
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Symfony2, Jornadas Symfony

  1. 1. Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony organizan patrocinan colaboran
  2. 2. NOTA Esta presentación es la versión simplificada de la que se utilizó en las primeras Jornadas Symfony. La presentación original está llena de efectos gráficos y animaciones imposibles de utilizar en slideshare.net Puedes ver la grabación en vídeo de la presentación original en http://bit.ly/symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  3. 3. NOTE This is the simplified version of the presentation used at the first Spanish Symfony Conference. The original presentation includes lots of cool effects and animations that cannot be exported to slideshare.net You can watch the video recording of the original presentation at http://bit.ly/symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  4. 4. Symfony 2 Javier Eguíluz, symfony.es Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony
  5. 5. sesión patrocinada por www.ideatea.com Jornadas Symfony http://decharlas.uji.es/symfony
  6. 6. ¿Qué es Symfony 2? Jornadas Symfony http://decharlas.uji.es/symfony
  7. 7. symfony Jornadas Symfony http://decharlas.uji.es/symfony
  8. 8. Symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  9. 9. ¿En qué se diferencian sf 1 y sf2? Jornadas Symfony http://decharlas.uji.es/symfony
  10. 10. en todo Jornadas Symfony http://decharlas.uji.es/symfony
  11. 11. en casi todo Jornadas Symfony http://decharlas.uji.es/symfony
  12. 12. La evolución de Symfony Jornadas Symfony http://decharlas.uji.es/symfony
  13. 13. sf 1.0 2007 symfony Jornadas Symfony http://decharlas.uji.es/symfony
  14. 14. sf 1.2 2008 sfRequest sfRouting sfLogger sfI18N sfUser sfResponse sfYAML sfDatabase sfForm sfStorage sfCache sfWidget sfValidator sfEventDispatcher symfony sfOutputEscaper sfCoreAutoload Jornadas Symfony http://decharlas.uji.es/symfony
  15. 15. sf 1.4 2009 symfony Jornadas Symfony http://decharlas.uji.es/symfony
  16. 16. ¿Por qué reescribirlo todo de nuevo? Jornadas Symfony http://decharlas.uji.es/symfony
  17. 17. Problemas Muchos archivos Configuración Difícil de aprender Formularios LENTO :) Jornadas Symfony http://decharlas.uji.es/symfony
  18. 18. Nuestro primer proyecto Symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  19. 19. 5.3.2 subversion Jornadas Symfony http://decharlas.uji.es/symfony
  20. 20. > git clone http://github.com/symfony/ symfony-sandbox.git Jornadas Symfony http://decharlas.uji.es/symfony
  21. 21. 1.x symfony 1.4 8.5 MB sandbox 3.919 archivos 2.x Symfony2 3 MB sandbox 2.244 archivos Jornadas Symfony http://decharlas.uji.es/symfony
  22. 22. Demo Jornadas Symfony http://decharlas.uji.es/symfony
  23. 23. > php hello/console -s > init:app frontend frontend/ web/ --yaml > init:bundle Application/ FrontendBundle Jornadas Symfony http://decharlas.uji.es/symfony
  24. 24. El código fuente Jornadas Symfony http://decharlas.uji.es/symfony
  25. 25. 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; return true; } } return @mkdir($path, $mode, true); return @mkdir($path, $mode, true); } } public function touch($files) public function touch($files) { { if (!is_array($files)) { if (!is_array($files)) $files = array($files); { } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  26. 26. 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; return true; } } EAR return @mkdir($path, $mode, true); /P return @mkdir($path, $mode, true); } end } Z public function touch($files) public function touch($files) { { if (!is_array($files)) { if (!is_array($files)) $files = array($files); { } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  27. 27. 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; return true; } } return @mkdir($path, $mode, true); 2 espacios 4 espacios return @mkdir($path, $mode, true); } } public function touch($files) public function touch($files) { { if (!is_array($files)) { if (!is_array($files)) $files = array($files); { } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  28. 28. 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; if ( ) return true; } } if ( ) { return @mkdir($path, $mode, true); } { return @mkdir($path, $mode, true); } ... ... public function touch($files) } public function touch($files) { { if (!is_array($files)) { { } if (!is_array($files)) $files = array($files); } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  29. 29. <?php namespace SymfonyFrameworkFoundationBundle; use SymfonyComponents...ContainerInterface; use SymfonyComponentsHttpKernelRequest; use SymfonyComponentsHttpKernelResponse; use SymfonyComponents...HttpKernelInterface; class Controller { protected $container; protected $request; ... Jornadas Symfony http://decharlas.uji.es/symfony
  30. 30. namespaces Jornadas Symfony http://decharlas.uji.es/symfony
  31. 31. class Migration { ... } class Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  32. 32. class sfMigration { ... } class Doctrine_Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  33. 33. namespace Symfony; class Migration { ... } namespace Doctrine; class Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  34. 34. namespace Symfony; namespace Doctrine; class Migration class Migration { { ... ... } } $migracion = new SymfonyMigration(); $migracion = new DoctrineMigration(); Jornadas Symfony http://decharlas.uji.es/symfony
  35. 35. SymfonyComponents SymfonyFramework SymfonyFoundation Jornadas Symfony http://decharlas.uji.es/symfony
  36. 36. SymfonyComponents BrowserKit Console CssSelector DependencyInjection DomCrawler EventDispatcher File Finder Form HttpKernel I18N OutputEscaper Process Routing Templating Validator Yaml Jornadas Symfony http://decharlas.uji.es/symfony
  37. 37. completo xxxxxx xxxxx xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  38. 38. Estructura del proyecto Jornadas Symfony http://decharlas.uji.es/symfony
  39. 39. 1.x 2.x mi_proyecto/ mi_proyecto/ apps/ frontend/ frontend/ src/ cache/ web/ config/ data/ lib/ log/ plugins/ test/ web/ Jornadas Symfony http://decharlas.uji.es/symfony
  40. 40. mi_proyecto/ frontend/ src/ web/ Jornadas Symfony http://decharlas.uji.es/symfony
  41. 41. mi_proyecto/frontend/ frontendKernel.php Jornadas Symfony http://decharlas.uji.es/symfony
  42. 42. mi_proyecto/frontend/ frontendKernel.php cache/ logs/ config/ Jornadas Symfony http://decharlas.uji.es/symfony
  43. 43. mi_proyecto/frontend/ frontendKernel.php cache/ logs/ config/ routing.yml config.yml config_dev.yml config_prod.yml Jornadas Symfony http://decharlas.uji.es/symfony
  44. 44. 1.x 2.x 7 archivos 3 archivos 124 líneas 35 líneas Jornadas Symfony http://decharlas.uji.es/symfony
  45. 45. mi_proyecto/ frontend/ src/ web/ Jornadas Symfony http://decharlas.uji.es/symfony
  46. 46. mi_proyecto/src/ autoload.php Jornadas Symfony http://decharlas.uji.es/symfony
  47. 47. mi_proyecto/src/ autoload.php Application/ Bundle/ vendor/ Jornadas Symfony http://decharlas.uji.es/symfony
  48. 48. mi_proyecto/src/ autoload.php Application/ Bundle/ vendor/ symfony/ doctrine/ zend/ Jornadas Symfony http://decharlas.uji.es/symfony
  49. 49. mi_proyecto/src/ autoload.php Application/ FrontendBundle/ Bundle/ vendor/ symfony/ doctrine/ zend/ Jornadas Symfony http://decharlas.uji.es/symfony
  50. 50. 1.x 2.x Proyecto Proyecto Aplicación Aplicación Módulo Bundle Jornadas Symfony http://decharlas.uji.es/symfony
  51. 51. Aplicación 1 Proyecto Módulo 2 Plugins Módulo 1 Módulo 3 Plugin 1 Aplicación 2 Plugin 2 Módulo 4 Módulo 5 Plugin 3 Jornadas Symfony http://decharlas.uji.es/symfony
  52. 52. Aplicación 1 Proyecto Aplicación 2 Módulo 1 Módulo 2 Módulo 3 Módulo 4 Módulo 5 Plugin 1 Plugin 2 Plugin 3 Jornadas Symfony http://decharlas.uji.es/symfony
  53. 53. Aplicación 1 Proyecto Aplicación 2 Bundle 1 Bundle 2 Bundle 3 Bundle 4 Bundle 5 Bundle 6 Bundle 7 Bundle 8 Jornadas Symfony http://decharlas.uji.es/symfony
  54. 54. Bundles (paquetes) Jornadas Symfony http://decharlas.uji.es/symfony
  55. 55. « Un bundle es un conjunto de archivos que implementan una funcionalidad » Jornadas Symfony http://decharlas.uji.es/symfony
  56. 56. Proyecto 1.x jobeet Aplicaciones frontend, backend Módulos oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  57. 57. Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle frontend, backend Jornadas Symfony http://decharlas.uji.es/symfony
  58. 58. Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  59. 59. Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle frontend, backend, oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  60. 60. 1.x 2.x Aplicación Módulo Bundle Plugin Librerías Jornadas Symfony http://decharlas.uji.es/symfony
  61. 61. mi_proyecto/src/ autoload.php Application/ FrontendBundle/ Bundle/ vendor/ Jornadas Symfony http://decharlas.uji.es/symfony
  62. 62. mi_proyecto/src/Application/ FrontendBundle/ Controller/ Resources/ Jornadas Symfony http://decharlas.uji.es/symfony
  63. 63. mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ Jornadas Symfony http://decharlas.uji.es/symfony
  64. 64. mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ config/ views/ Jornadas Symfony http://decharlas.uji.es/symfony
  65. 65. mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ config/ routing.yml views/ index.php Jornadas Symfony http://decharlas.uji.es/symfony
  66. 66. twig Jornadas Symfony http://decharlas.uji.es/symfony
  67. 67. PropelBundle/ Command/ DependencyInjection/ Logger/ Resources/ Tests/ Jornadas Symfony http://decharlas.uji.es/symfony
  68. 68. TwigBundle/ DependencyInjection/ Extension/ Loader/ Renderer/ Resources/ Tests/ TokenParsers/ Jornadas Symfony http://decharlas.uji.es/symfony
  69. 69. Jornadas Symfony http://decharlas.uji.es/symfony
  70. 70. completo modular xxxxx xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  71. 71. Inyección de Dependencias Jornadas Symfony http://decharlas.uji.es/symfony
  72. 72. Inyección de Dependencias DI Inversion of Control IoC Jornadas Symfony http://decharlas.uji.es/symfony
  73. 73. Inyección de Dependencias DI Jornadas Symfony http://decharlas.uji.es/symfony
  74. 74. 1.x 2.x sfConfig sfProjectConfiguration sfAppConfiguration sfContext DI config handlers ... Jornadas Symfony http://decharlas.uji.es/symfony
  75. 75. Problema ¿Cómo configuro un objeto mailer para enviar emails desde mis aplicaciones? Jornadas Symfony http://decharlas.uji.es/symfony
  76. 76. public function emailAction() { $mailer = $this->getMailer(); $mensaje = Swift_Message::newInstance() ->setSubject('Asunto') ->setFrom('remitente@ejemplo.com') ->setTo('destinatario@ejemplo.com') ->setBody('Cuerpo'); $mailer->send($mensaje); ... } Jornadas Symfony http://decharlas.uji.es/symfony
  77. 77. class Mailer { function __construct() { $this->setUsername('xxxxxxxx') $this->setPassword('xxxxxxxx'); } } $mailer = $this->getMailer(); Jornadas Symfony http://decharlas.uji.es/symfony
  78. 78. class Mailer { function __construct() { $this->setUsername(MAILER_USERNAME) $this->setPassword(MAILER_PASSWORD); } } define('MAILER_USERNAME', 'xxxxxxxx'); define('MAILER_PASSWORD', 'xxxxxxxx'); $mailer = $this->getMailer(); Jornadas Symfony http://decharlas.uji.es/symfony
  79. 79. class Mailer { function __construct($user, $pass) { $this->setUsername($user) $this->setPassword($pass); } } $mailer = $this->getMailer('xxxx', 'xxxx'); Jornadas Symfony http://decharlas.uji.es/symfony
  80. 80. class Mailer { function __construct($transport) { $this->transport = $transport; } } $transport = new SMTP_Gmail($user, $pass); $mailer = $this->getMailer($transport); Jornadas Symfony http://decharlas.uji.es/symfony
  81. 81. DIC Jornadas Symfony http://decharlas.uji.es/symfony
  82. 82. D ependency I njection C ontainer Jornadas Symfony http://decharlas.uji.es/symfony
  83. 83. DIC = configuración flexible Jornadas Symfony http://decharlas.uji.es/symfony
  84. 84. frontend/config/config.yml swift.mailer: transport: gmail username: xxxxxxxx password: xxxxxxxx src/FrontendBundle/Controller/DefaultController.php public function emailAction() { $mailer = $this->getMailer(); $mensaje = Swift_Message::newInstance() ->setSubject('Asunto') ->... Jornadas Symfony http://decharlas.uji.es/symfony
  85. 85. DIC ! Objetos globales " Modelo " Tus clases Jornadas Symfony http://decharlas.uji.es/symfony
  86. 86. El modelo Jornadas Symfony http://decharlas.uji.es/symfony
  87. 87. Jornadas Symfony http://decharlas.uji.es/symfony
  88. 88. Jornadas Symfony http://decharlas.uji.es/symfony
  89. 89. ORM DBAL PDO Jornadas Symfony http://decharlas.uji.es/symfony
  90. 90. ORM ODM Jornadas Symfony http://decharlas.uji.es/symfony
  91. 91. Object Document Mapper Jornadas Symfony http://decharlas.uji.es/symfony
  92. 92. NoSQL Jornadas Symfony http://decharlas.uji.es/symfony
  93. 93. NoSQL Jornadas Symfony http://decharlas.uji.es/symfony
  94. 94. Jornadas Symfony http://decharlas.uji.es/symfony
  95. 95. doctrine:ensure-production-settings doctrine:cache:clear-metadata doctrine:cache:clear-query doctrine:clear-result doctrine:data:load doctrine:database:create doctrine:database:drop doctrine:generate:entities doctrine:generate:entity doctrine:generate:proxies doctrine:generate:repositories Jornadas Symfony http://decharlas.uji.es/symfony
  96. 96. doctrine:mapping:convert doctrine:mapping:convert-d1-schema doctrine:mapping:import doctrine:query:dql doctrine:query:sql doctrine:schema:create doctrine:schema:drop doctrine:schema:update Jornadas Symfony http://decharlas.uji.es/symfony
  97. 97. class DefaultController extends Controller { public function indexAction() { $conexion = $this->container->getService( 'database_connection' ); $ofertas = $conexion->fetchAll( 'SELECT * FROM ofertas' ); ... } } Jornadas Symfony http://decharlas.uji.es/symfony
  98. 98. class DefaultController extends Controller { public function modificarAction() { $orm = $this->getEntityManager(); $oferta = new Oferta(); $oferta->setTitulo('Programador Senior'); $orm->persist($oferta); $orm->flush(); ... } } Jornadas Symfony http://decharlas.uji.es/symfony
  99. 99. class DefaultController extends Controller { public function modificarAction() { $odm = $this->getDocumentManager(); $oferta = new Oferta(); $oferta->setTitulo('Programador Senior'); $odm->persist($oferta); $odm->flush(); ... } } Jornadas Symfony http://decharlas.uji.es/symfony
  100. 100. La Vista Jornadas Symfony http://decharlas.uji.es/symfony
  101. 101. 1.x 2.x slot layout partial plantilla plantilla slot component component slot Jornadas Symfony http://decharlas.uji.es/symfony
  102. 102. 1.x 2.x slot slot layout plantilla + slot partial plantilla plantilla plantilla component plantilla + acción component slot plantilla + acción Jornadas Symfony http://decharlas.uji.es/symfony
  103. 103. completo modular fácil xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  104. 104. 1.x <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php echo $sf_content ?> </body> </html> Jornadas Symfony http://decharlas.uji.es/symfony
  105. 105. 2.x <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php $view->slots->output('_content') ?> </body> </html> Jornadas Symfony http://decharlas.uji.es/symfony
  106. 106. <?php $view->extend( 'FrontendBundle:Default:layout' ); ?> <h1><?php echo $oferta['titulo'] ?></h1> <p><?php echo $oferta['descripcion'] ?></p> ... Jornadas Symfony http://decharlas.uji.es/symfony
  107. 107. $view->extend('FrontendBundle:Default:layout'); src/ Application/ FrontendBundle/ Resources/ views/ Default/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  108. 108. $view->extend('FrontendBundle::layout'); src/ Application/ FrontendBundle/ Resources/ views/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  109. 109. $view->extend('PlantillasBundle::layout'); src/ Bundle/ PlantillasBundle/ Resources/ views/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  110. 110. $view->extend( 'PlantillasBundle::layout_pagina' ); Jornadas Symfony http://decharlas.uji.es/symfony
  111. 111. $view->extend( 'PlantillasBundle::layout_seccion' ); Jornadas Symfony http://decharlas.uji.es/symfony
  112. 112. $view->extend( 'PlantillasBundle::layout' ); Jornadas Symfony http://decharlas.uji.es/symfony
  113. 113. echo $view->render( 'SitioBundle::buscador' ) ... echo $view->render( 'NoticiasBundle:Default:ultimaHora', array('noticias' => $noticias) ) Jornadas Symfony http://decharlas.uji.es/symfony
  114. 114. echo $view->actions->output( 'BolsaBundle:Cotizaciones:indices', array('indice' => 'IBEX35') ) ... echo $view->actions->output( 'ContenidosBundle:Noticias:ultimaHora' ) Jornadas Symfony http://decharlas.uji.es/symfony
  115. 115. $view->extend(...) $view->render(...) $view->actions->output(...) Jornadas Symfony http://decharlas.uji.es/symfony
  116. 116. Helpers Jornadas Symfony http://decharlas.uji.es/symfony
  117. 117. Los helpers de Symfony2 son objetos Jornadas Symfony http://decharlas.uji.es/symfony
  118. 118. <a href="<?php echo $view->router->generate('portada') ?>"> Portada </a> Jornadas Symfony http://decharlas.uji.es/symfony
  119. 119. 1.x <?php include_stylesheets() ?> <?php use_stylesheet('main.css') ?> 2.x <?php echo $view->stylesheets ?> <?php $view->stylesheets->add('main.css') ?> Jornadas Symfony http://decharlas.uji.es/symfony
  120. 120. «We're trading line length for lower [code] complexity» David Heinemeier RailsConf 2010 Jornadas Symfony http://decharlas.uji.es/symfony
  121. 121. Plantillas avanzadas Jornadas Symfony http://decharlas.uji.es/symfony
  122. 122. twig Jornadas Symfony http://decharlas.uji.es/symfony
  123. 123. PHP <h1><?php echo $oferta['titulo'] ?></h1> twig <h1>{{ oferta.titulo }}</h1> Jornadas Symfony http://decharlas.uji.es/symfony
  124. 124. PHP <a href="<?php echo $view->router->generate('portada') ?>"> Volver a la portada </a> twig <a href="{% route 'portada' %}"> Volver a la portada </a> Jornadas Symfony http://decharlas.uji.es/symfony
  125. 125. PHP <?php foreach ($ofertas as $id => $oferta): ?> <h2><?php echo $oferta['titulo'] ?></h2> <p><?php echo $oferta['descripcion'] ?></p> ... <?php endforeach ?> twig {% for oferta in ofertas %} <h2>{{ oferta.titulo }}</h2> <p>{{ oferta.descripcion }}</p> ... {% endfor %} Jornadas Symfony http://decharlas.uji.es/symfony
  126. 126. twig ! Código conciso ! Diseñadores ! Ultra-rápido Jornadas Symfony http://decharlas.uji.es/symfony
  127. 127. El controlador Jornadas Symfony http://decharlas.uji.es/symfony
  128. 128. routing.yml 1.x routing.yml 2.x bundle bundle bundle bundle Jornadas Symfony http://decharlas.uji.es/symfony
  129. 129. apps/frontend/config/config.yml 1.x homepage: url: / param: { module: default, action: index } frontend/config/config.yml 2.x homepage: pattern: / defaults: { _bundle: FoundationBundle , _controller: Default, _action: index } Jornadas Symfony http://decharlas.uji.es/symfony
  130. 130. homepage: pattern: / defaults: { _bundle: FoundationBundle , _controller: Default, _action: index } homepage: pattern: / defaults: { _controller: FoundationBundle:Default:index } Jornadas Symfony http://decharlas.uji.es/symfony
  131. 131. frontend/config/routing.yml 2.x homepage: pattern: / defaults: { _controller: FoundationBundle:Default:index } frontend: resource: FrontendBundle/Resources/ config/routing.yml Jornadas Symfony http://decharlas.uji.es/symfony
  132. 132. oferta: pattern: /ofertas/:id ... public function ofertaAction($id) { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  133. 133. oferta: pattern: /ofertas/:seccion/:categoria ... public function ofertaAction($seccion, $categoria) { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  134. 134. public function indexAction() 1.x { $this->ofertas = $ofertas; } *Se supone que la plantilla es indexSuccess.php public function indexAction() { 2.x return $this->render( 'FrontendBundle:Default:index', array('ofertas' => $ofertas) ); } Jornadas Symfony http://decharlas.uji.es/symfony
  135. 135. Formularios Jornadas Symfony http://decharlas.uji.es/symfony
  136. 136. 1.x Form sfForm Controlador Modelo Modelo 2.x Jornadas Symfony http://decharlas.uji.es/symfony
  137. 137. 1.x sfForm Controlador Modelo 2.x Form Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  138. 138. $form = new Form('cliente', $cliente); $form->add(new TextField('nombre')); $form->add(new TextField('apellidos')); $form->add(new TextareaField('direccion')); Jornadas Symfony http://decharlas.uji.es/symfony
  139. 139. TextField TextareaField CheckboxField ChoiceField PasswordField HiddenField Jornadas Symfony http://decharlas.uji.es/symfony
  140. 140. $form->add(new RepeatedField( new PasswordField('contrasena')) )); Contraseña Repite la contraseña Jornadas Symfony http://decharlas.uji.es/symfony
  141. 141. $form->add(new CollectionField( new TextField('telefonos')) )); Teléfono 1 Teléfono 2 Teléfono 3 Jornadas Symfony http://decharlas.uji.es/symfony
  142. 142. $direccion = new FieldGroup('direccion'); $direccion->add(new TextField('calle')); $direccion->add(new TextField('numero')); $direccion->add(new TextField('piso')); $direccion->add(new TextField('cp')); $form->add($direccion); Dirección Calle Número Piso CP Jornadas Symfony http://decharlas.uji.es/symfony
  143. 143. TextField RepeatedField TextareaField CollectionField CheckboxField FieldGroup ChoiceField PasswordField HiddenField Jornadas Symfony http://decharlas.uji.es/symfony
  144. 144. i18n TextField RepeatedField MoneyField i18n TextareaField CollectionField DateField i18n CheckboxField FieldGroup BirthdayField i18n i18n ChoiceField NumberField TimeField i18n i18n PasswordField IntegerField DateTimeField i18n i18n HiddenField PercentField TimezoneField Jornadas Symfony http://decharlas.uji.es/symfony
  145. 145. Validación Jornadas Symfony http://decharlas.uji.es/symfony
  146. 146. 1.x 2.x sfForm Form sfValidator Validador Controlador Modelo Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  147. 147. 1.x 2.x sfForm Form Validador sfValidator Form Controlador Validador Modelo Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  148. 148. ApplicationFrontendBundleModelCliente: properties: nombre: - MinLength: 3 fecha_nacimiento: - Date: ~ codigo_postal: - MaxLength: 5 Jornadas Symfony http://decharlas.uji.es/symfony
  149. 149. class Cliente { public $nombre; public $fecha_nacimiento; public $codigo_postal; } Jornadas Symfony http://decharlas.uji.es/symfony
  150. 150. class Cliente { /** @Validation({ @MinLength(3) }) */ public $nombre; /** @Validation({ @Date }) */ public $fecha_nacimiento; /** @Validation({ @MaxLength(5) }) */ public $codigo_postal; } Jornadas Symfony http://decharlas.uji.es/symfony
  151. 151. JSR 303 Bean Validation Validating data is a common task that occurs throughout an application, from the presentation layer to the persistence layer. Often the same validation logic is implemented in each layer, proving to be time consuming and error-prone. To avoid duplication of these validations in each layer, developers often bundle validation logic directly into the domain model, cluttering domain classes with validation code that is, in fact, metadata about the class itself. This JSR defines a metadata model and API for JavaBean validation. The default metadata source is annotations, with the ability to override and extend the meta-data through the use of XML validation descriptors. The validation API developed by this JSR is not intended for use in any one tier or programming model. It is specifically not tied to either the web tier or the persistence tier, and is available for both server-side application programming, as well as rich client Swing application developers. This API is seen as a general extension to the Java-Beans object model, and as such is expected to be used as a core component Jornadas Symfony http://decharlas.uji.es/symfony
  152. 152. $validador = $this->container->getService( 'validator' ); $form = new Form( 'cliente', $cliente, $validador ); Jornadas Symfony http://decharlas.uji.es/symfony
  153. 153. Pruebas unitarias y funcionales Jornadas Symfony http://decharlas.uji.es/symfony
  154. 154. PHPUnit 3.5 Jornadas Symfony http://decharlas.uji.es/symfony
  155. 155. src/ Application/ FrontendBundle/ Model/ Article.php Tests/ Model/ ArticleTest.php Jornadas Symfony http://decharlas.uji.es/symfony
  156. 156. > phpunit -c frontend/ > phpunit -c frontend/ src/Application/ FrontendBundle/ Jornadas Symfony http://decharlas.uji.es/symfony
  157. 157. > phpunit -c frontend/ Jornadas Symfony http://decharlas.uji.es/symfony
  158. 158. > phpunit -c frontend/ Jornadas Symfony http://decharlas.uji.es/symfony
  159. 159. Estándares Jornadas Symfony http://decharlas.uji.es/symfony
  160. 160. 1.x 2.x sfCache Zend_Cache sfLogger Zend_Logger sfValidator Java JSR 303 autoload PHP 5.3 autoload lime PHPUnit Jornadas Symfony http://decharlas.uji.es/symfony
  161. 161. completo modular fácil estándar xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  162. 162. Rendimiento Jornadas Symfony http://decharlas.uji.es/symfony
  163. 163. 100 veces más rápido que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  164. 164. depende de l tipo de benchm ark 100 veces más rápido que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  165. 165. 3x 3x 4x 6x Jornadas Symfony http://decharlas.uji.es/symfony
  166. 166. ! Utiliza PHP 5.3.2 Jornadas Symfony http://decharlas.uji.es/symfony
  167. 167. 20 % Jornadas Symfony http://decharlas.uji.es/symfony
  168. 168. ! Utiliza PHP 5.3.2 ! lazy-loading Jornadas Symfony http://decharlas.uji.es/symfony
  169. 169. autoloader servicios PHP 5.3 listeners interoperability standard helpers Jornadas Symfony http://decharlas.uji.es/symfony
  170. 170. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache Jornadas Symfony http://decharlas.uji.es/symfony
  171. 171. cache/ frontendDevDebugProjectContainer.meta frontendDevDebugProjectContainer.php frontendUrlGenerator.meta frontendUrlGenerator.php frontendUrlMatcher.meta frontendUrlMatcher.php __TwigTemplate_a242fa75a6db74398d3e6.php Jornadas Symfony http://decharlas.uji.es/symfony
  172. 172. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros Jornadas Symfony http://decharlas.uji.es/symfony
  173. 173. > route:dump RewriteCond %{PATH_INFO} ^/$ RewriteRule .* index.php [QSA,L,E=_ROUTING__route:portada,E=_ROUTING__c ontroller:FrontendBundle:Default:index] RewriteCond %{PATH_INFO} ^/ofertas/([^/.]+?)$ RewriteRule .* index.php [QSA,L,E=_ROUTING__route:oferta,E=_ROUTING_id: %1,E=_ROUTING__controller:FrontendBundle:Defau lt:oferta] Jornadas Symfony http://decharlas.uji.es/symfony
  174. 174. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros ! acelerador web Jornadas Symfony http://decharlas.uji.es/symfony
  175. 175. Apache Jornadas Symfony http://decharlas.uji.es/symfony
  176. 176. Squid Apache Jornadas Symfony http://decharlas.uji.es/symfony
  177. 177. Squid Apache Jornadas Symfony http://decharlas.uji.es/symfony
  178. 178. Symfony2 incluye un acelerador web creado con PHP Jornadas Symfony http://decharlas.uji.es/symfony
  179. 179. Apache Acelerador Aplicación Jornadas Symfony http://decharlas.uji.es/symfony
  180. 180. El acelerador guarda en la cache páginas completas Jornadas Symfony http://decharlas.uji.es/symfony
  181. 181. $respuesta->setExpires(...); $respuesta->setMaxAge(...); $respuesta->setTtl(...); $respuesta->setLastModified(...); Jornadas Symfony http://decharlas.uji.es/symfony
  182. 182. public function indexAction() { $respuesta = $this->render( 'FrontendBundle:Default:index', array('ofertas' => $ofertas) ); $respuesta->setMaxAge(60); return $respuesta; } Jornadas Symfony http://decharlas.uji.es/symfony
  183. 183. El acelerador minimiza las veces que se ejecuta la aplicación Jornadas Symfony http://decharlas.uji.es/symfony
  184. 184. Jornadas Symfony http://decharlas.uji.es/symfony
  185. 185. 180 minutos 1 minuto 5 minutos 180 1 minuto 5 minutos minutos 5 minutos Jornadas Symfony http://decharlas.uji.es/symfony
  186. 186. ESI Language Specification 1.0 Edge Side Includes (ESI) is an XML-based markup language that provides a means to assemble resources in HTTP clients. Unlike other in-markup languages, ESI is designed to leverage client tools like caches to improve end-user perceived performance, reduce processing overhead on the origin server, and enhanced availability. ESI allows for dynamic content assembly at the edge of the network, whether it is in a Content Delivery Network, end-user's browser, or in a "Reverse Proxy" IETF HTTP/1.1, part 6: Caching right next to the origin server. ESI is primarily intended for processing on surrogates (intermediaries that operate on behalf of theAbstract origin server, also known as "Reverse Proxies") that understand the ESI language. However, its application is not restricted to these devices. The control of where Protocol (HTTP) is an application-level The Hypertext Transfer ESI is processed is protocol for distributed, collaborative, hypermedia information addressed in the Edge Architecture Specification. Its capability token is ESI/1.0 ESI allows surrogates to treat parts document is Part 6 of the seven-part specification systems. This of pages as cacheable resources, which gives them that ability tothe protocol referred to as "HTTP/1.1" and, taken the defines serve resources from cache in more situations. together, obsoletes RFC 2616. Part 6 defines requirements on HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages. Jornadas Symfony http://decharlas.uji.es/symfony
  187. 187. ... <?php $view->actions->render( 'BolsaBundle::cotizaciones' ) ?> ... Jornadas Symfony http://decharlas.uji.es/symfony
  188. 188. ... <?php $view->actions->render( 'BolsaBundle::cotizaciones', array('standalone' => true) ) ?> ... Jornadas Symfony http://decharlas.uji.es/symfony
  189. 189. <esi:include src="..." /> Jornadas Symfony http://decharlas.uji.es/symfony
  190. 190. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros ! acelerador web Jornadas Symfony http://decharlas.uji.es/symfony
  191. 191. 100 veces más rápido que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  192. 192. EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO Jornadas Symfony EXCLUSIVO http://decharlas.uji.es/symfony
  193. 193. completo modular fácil estándar rápido Jornadas Symfony http://decharlas.uji.es/symfony
  194. 194. 50% menos memoria que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  195. 195. Y mucho más... Jornadas Symfony http://decharlas.uji.es/symfony
  196. 196. Symfony2 está ! siendo desarrollado en estos momentos Jornadas Symfony http://decharlas.uji.es/symfony
  197. 197. autoloading eventos bundles cache formularios doctrine controlador validador propel CLI admin generator request/response configuración helpers enrutamiento base de datos i18n usuario debug logger pruebas escape mailer vista Jornadas Symfony http://decharlas.uji.es/symfony
  198. 198. primera versión alpha septiembre Jornadas Symfony http://decharlas.uji.es/symfony
  199. 199. lanzamiento previsto finales 2010 Jornadas Symfony http://decharlas.uji.es/symfony
  200. 200. Muchas gracias Jornadas Symfony http://decharlas.uji.es/symfony
  201. 201. Preguntas javier.eguiluz@gmail.com Jornadas Symfony http://decharlas.uji.es/symfony

×