indice de contenidos del libro "desarrollo web agil con symfony2"
DESCRIPTION
Indice de contenidos del libro "Desarrollo web agil con Symfony2"TRANSCRIPT
Índice de contenidosSecció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