5
Í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

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

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Indice de contenidos del libro "Desarrollo web agil con Symfony2"

Í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

Page 2: Indice de contenidos del libro "Desarrollo web agil con Symfony2"

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

Page 3: Indice de contenidos del libro "Desarrollo web agil con Symfony2"

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

Page 4: Indice de contenidos del libro "Desarrollo web agil con Symfony2"

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

Page 5: Indice de contenidos del libro "Desarrollo web agil con Symfony2"

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