Ver índice de contenidos del libro

4.1. La arquitectura MVC

Si has desarrollado sitios web con PHP sin utilizar ningún framework, seguramente sigues el razonamiento de crear un archivo PHP por cada página HTML del sitio. Además, todos esos archivos PHP contienen seguramente la misma estructura: inicialización y configuración global, lógica de negocio relacionada con la página solicitada, obtención de registros de la base de datos y por último, el código PHP que se emplea para generar la página.

También es posible que utilices un sistema de plantillas para separar el código PHP y las etiquetas HTML. Puede que también utilices una capa de abstracción de base de datos para separar la lógica de negocio y la interacción con el modelo de datos. A pesar de estas mejoras, la mayoría de las veces te encuentras con una gran cantidad de código que es muy difícil de mantener. Programar la aplicación de esa manera quizás te costó muy poco tiempo, pero modificarla y añadirle nuevas características se convierte en una pesadilla, sobre todo porque nadie más que tu sabe cómo está construida y cómo funciona.

Para cada problema siempre hay buenas soluciones y para la programación web, la solución más utilizada actualmente para organizar el código es el patrón de diseño MVC. En pocas palabras, el patrón de diseño MVC organiza el código en base a su función. De hecho, este patrón separa el código en tres capas:

  • La capa del modelo define la lógica de negocio (la base de datos pertenece a esta capa). Como ya sabes, Symfony guarda todas las clases y archivos relacionados con el modelo en el directorio lib/model/.
  • La vista es lo que utilizan los usuarios para interactuar con la aplicación (los gestores de plantillas pertenecen a esta capa). En Symfony la capa de la vista está formada principalmente por plantillas en PHP. Estas plantillas se guardan en varios directorios llamados templates/ repartidos por todo el proyecto, tal y como veremos hoy mismo.
  • El controlador es un bloque de código que realiza llamadas al modelo para obtener los datos y se los pasa a la vista para que los muestre al usuario. Cuando instalamos Symfony el primer día, explicamos que todas las peticiones se canalizan a través de los controladores frontales (index.php y frontend_dev.php). Estos controladores frontales realmente delegan todo el trabajo en las acciones. Como vimos ayer, las agrupaciones lógicas de acciones se denominan módulos.
Arquitectura MVC

Figura 4.1 Arquitectura MVC

Hoy vamos a utilizar los bocetos gráficos que definimos el segundo día para personalizar y hacer más dinámicas la portada y las páginas que muestran cada oferta de trabajo. Al mismo tiempo, vamos a modificar muchas cosas en muchos archivos diferentes para explicar la estructura de directorios de Symfony y su forma de separar el código en capas.