Issuu on Google+

Índice de contenidos Sección 1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Capítulo 1 Lo que debes saber antes de comenzar. . . . . . . . . 17 1.1 Cómo leer este libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.2 Introducción a Symfony2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.3 Introducción a PHP 5.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.4 Introducción a YAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.5 Introducción a HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.6 Introducción a Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

Capítulo 2 El proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.1 Funcionamiento detallado de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2 Wireframes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.3 La base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.4 Aplicando la filosofía de Symfony2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.5 Entidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.6 Bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.7 Enrutamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Capítulo 3 Instalando y configurando Symfony2 . . . . . . . . . 41 3.1 Descargando e instalando Symfony2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.2 Configurando el entorno de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.3 Actualizando Symfony2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.4 Creando los bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Sección 2 Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Capítulo 4 Creando las primeras páginas. . . . . . . . . . . . . . . 59 4.1 La filosofía de Symfony2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.2 La primera página. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.3 Creando todas las páginas estáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.4 Configurando la barra del final en las URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Capítulo 5 La base de datos . . . . . . . . . . . . . . . . . . . . . . . . 69 5.1 Entidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 5.2 Creando y configurando la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87


5.3 El Entity Manager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.4 Archivos de datos o fixtures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 5.5 Alternativas para generar el modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

Capítulo 6 Creando la portada . . . . . . . . . . . . . . . . . . . . . 107 6.1 Arquitectura MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 6.2 El enrutamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 6.3 El controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 6.4 La plantilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 6.5 Entornos de ejecución. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.6 Depurando errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 6.7 Refactorizando el Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 6.8 Refactorizando el Modelo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 6.9 Refactorizando la Vista. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 6.10 Funcionamiento interno de Symfony2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 6.11 El objeto Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 6.12 El objeto Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

Capítulo 7 Completando el frontend . . . . . . . . . . . . . . . . . 153 7.1 Herencia de plantillas a tres niveles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 7.2 Hojas de estilo y archivos JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 7.3 Seleccionando la ciudad activa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 7.4 Creando la página de detalle de una oferta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 7.5 Completando las plantillas con extensiones de Twig . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 7.6 Creando la página de ofertas recientes de una ciudad. . . . . . . . . . . . . . . . . . . . . . . . . . . 178 7.7 Creando la portada de cada tienda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 7.8 Refactorización final. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

Capítulo 8 Registrando usuarios . . . . . . . . . . . . . . . . . . . . 193 8.1 Creando la página de compras recientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 8.2 Restringiendo el acceso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 8.3 Creando proveedores de usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 8.4 Añadiendo el formulario de login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 8.5 Modificando las plantillas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 8.6 Creando los archivos de datos de usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 8.7 Formulario de registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 8.8 Visualizando el perfil del usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

Capítulo 9 RSS y los formatos alternativos . . . . . . . . . . . . 255


9.1 Formatos alternativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 9.2 Generando el RSS de las ofertas recientes de una ciudad . . . . . . . . . . . . . . . . . . . . . . . . 256 9.3 Generando el RSS de las ofertas recientes de una tienda . . . . . . . . . . . . . . . . . . . . . . . . 261 9.4 Registrando nuevos formatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

Capítulo 10 Internacionalizando el sitio web . . . . . . . . . . . 267 10.1 Configuración inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 10.2 Rutas internacionalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 10.3 Traduciendo contenidos estáticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 10.4 Traduciendo contenidos dinámicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 10.5 Traduciendo páginas estáticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 10.6 Traduciendo fechas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Capítulo 11 Tests unitarios y funcionales . . . . . . . . . . . . . 293 11.1 Primeros pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 11.2 Tests unitarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 11.3 Test funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 11.4 Configurando PHPUnit en Symfony2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Sección 3 Extranet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 Capítulo 12 Planificación. . . . . . . . . . . . . . . . . . . . . . . . . 329 12.1 Bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 12.2 Enrutamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 12.3 Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

Capítulo 13 Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 13.1 Definiendo la nueva configuración de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 13.2 Preparando el proveedor de usuarios de las tiendas . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 13.3 Creando el formulario de login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 13.4 Listas de control de acceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

Capítulo 14 Creando la parte de administración. . . . . . . . . 353 14.1 Creando la portada de la extranet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 14.2 Mostrando las ventas de una oferta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 14.3 Mostrando el perfil de la tienda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

Capítulo 15 Administrando las ofertas . . . . . . . . . . . . . . . 367 15.1 Creando ofertas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367


15.2 Modificando las ofertas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378

Sección 4 Backend. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Capítulo 16 Planificación. . . . . . . . . . . . . . . . . . . . . . . . . 389 16.1 Bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 16.2 Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 16.3 Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

Capítulo 17 Admin generator . . . . . . . . . . . . . . . . . . . . . . 399 17.1 Admin generator manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 17.2 Generador de código de Symfony2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 17.3 SonataAdminBundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

Capítulo 18 Newsletters y comandos de consola . . . . . . . . 429 18.1 Creando comandos de consola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 18.2 Generando la newsletter de cada usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 18.3 Enviando la newsletter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

Capítulo 19 Mejorando el rendimiento . . . . . . . . . . . . . . . 453 19.1 Desactivando los elementos que no utilizas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 19.2 Mejorando la carga de las clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 19.3 Mejorando el rendimiento del enrutamiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 19.4 Mejorando el rendimiento de la parte del cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 19.5 Mejorando el rendimiento de Doctrine2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 19.6 Mejorando el rendimiento de la aplicación con cachés . . . . . . . . . . . . . . . . . . . . . . . . . 481

Capítulo 20 Caché . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 20.1 La caché del estándar HTTP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 20.2 Estrategias de caché . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 20.3 Cacheando con reverse proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 20.4 ESI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502

Sección 5 Apéndices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Apéndice A El motor de plantillas Twig . . . . . . . . . . . . . . 513 A.1 ¿Qué versión de Twig utilizo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 A.2 Sintaxis básica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 A.3 Twig para maquetadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 A.4 Twig para programadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520


A.5 Usando Twig en proyectos PHP propios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 A.6 Usando Twig en Symfony2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561

Ap茅ndice B Inyecci贸n de dependencias . . . . . . . . . . . . . . . 569 B.1 Entendiendo la inyecci贸n de dependencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 B.2 La inyecci贸n de dependencias en Symfony2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577


Indice de contenidos del libro "Desarrollo web agil con Symfony2"