¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Symfony 5
  3. Arquitectura del framework
Extrait - Symfony 5 Desarrolle sitios web PHP estructurados y eficientes
Extractos del libro
Symfony 5 Desarrolle sitios web PHP estructurados y eficientes Volver a la página de compra del libro

Arquitectura del framework

El modelo de diseño MVC

1. Definiciones y responsabilidades

El acrónimo MVC (del inglés Model View Controller) es un término muy común en el mundo del desarrollo de software. Califica un modelo de diseño (o Design Pattern en inglés) cuyo objetivo es identificar con precisión las responsabilidades de los diferentes componentes de una aplicación, con el fin de aumentar su mantenibilidad y escalabilidad.

El modelo MVC es un modelo de diseño de arquitectura de software, cuyas primeras implementaciones se remontan a principios de los años 1980 en el lenguaje SmallTalk. Con el objetivo de dominar una cierta complejidad aplicativa, se decide asignar tareas específicas a tres categorías de componentes:

  • El modelo: componentes responsables de la gestión de los datos y del procesamiento de negocio de la aplicación.

  • La vista: para soportar la visualización de información al usuario final.

  • El controlador: sirve como conmutador entre el usuario, los datos y la vista.

Adquirida a finales de la década de 1990 por la plataforma Java Enterprise Edition, dedicada al desarrollo web, se aplicó a muchas otras tecnologías para desarrollar aplicaciones y sitios web y, por lo tanto, en PHP en Symfony.

a. La vista

La vista se corresponde con la parte de «presentación». A través de la vista, el usuario interactúa con la aplicación.

A menudo se refiere a templates. Una template es una «plantilla», un diseño que permite presentar información a los usuarios, a través de una interfaz.

En el contexto de una aplicación web, una plantilla contiene esencialmente HTML para el diseño, así como código específico, PHP u otro, para integrar los datos dinámicos que provienen del modelo. El usuario interactúa...

Arquitectura de Symfony

1. Presentación

Ahora vamos a descubrir las principales entidades del framework involucradas en el procesamiento de una petición, y descubriremos dos que son específicas de Symfony: el Kernel y el Service Container.

Antes de esquematizar esta arquitectura, he aquí una breve descripción de estas dos entidades:

  • El Kernel («núcleo» en castellano) es el corazón del framework. Es un componente interno y no es obligatorio conocer su existencia para desarrollar en Symfony. Sin embargo, entender cómo funciona y saber identificar sus señales es fundamental para aprovechar al máximo las posibilidades que ofrece el framework.

  • El Service Container es un componente esencial, inevitable. Es una especie de caja de herramientas, en la que encontrará lo que se llama «servicios». Estos servicios son diversos y variados. Algunos permiten consultar bases de datos; otros, serializar objetos, etc. Incluso tendrá derecho a crear sus propios servicios.

2. El controlador front

Hay un tercer componente importante: el controlador front.

El controlador front no es realmente un aspecto específico de Symfony, sino que se trata de un enfoque estándar para el modelo MVC que asume que todo el procesamiento de peticiones de bajo nivel se realiza a través de un único punto de entrada. Este controlador front es responsable de transformar las peticiones...

Symfony Flex

1. Presentación

Desde la versión 4 del framework, Symfony Flex representa el enfoque para instalar dependencias y, por lo tanto, funcionalidades adicionales en un proyecto Symfony.

Symfony Flex hace que haya quedado obsoleto el antiguo sistema basado en «bundle», finalmente considerado demasiado restrictivo para instalar nuevas dependencias. En este antiguo sistema, además de tener que instalar una nueva dependencia, a menudo era necesario actuar de manera manual sobre la configuración de un nuevo bundle; con Symfony Flex, todo queda cubierto.

La idea fundamental que marca la diferencia con los bundles es que Flex añade una configuración predeterminada inmediatamente operativa además de la dependencia y, en la mayoría de los casos, esta configuración no se tiene que cambiar.

Todas las tareas que Flex debe realizar se describen en un archivo en formato JSON (JavaScript Object Notation) llamado Flex Recipe.

2. Funcionamiento de Symfony Flex

En la base del funcionamiento de Symfony Flex, está la herramienta Composer que hemos presentado en el capítulo Implementación de un proyecto Symfony. En realidad, Symfony Flex es una extensión de Composer que permite añadir procesos, además de la simple instalación de librerías PHP. Symfony Flex también es el paquete Composer symfony/flex; extiende Composer y se utiliza con el comando composer. Entonces, cuando usa el comando composer require nombre_dependencia, Flex busca si hay una recipe con ese nombre y, de ser así, la instala. De lo contrario, cede el control a Composer.

Al igual que Composer, Flex utiliza repositorios alojados en GitHub en los que se concentran todas las recipes:

  • El repositorio principal de recipes (https://github.com/symfony/recipes): contiene una lista organizada de recipes para paquetes oficiales. Symfony Flex solo busca en este repositorio predeterminado.

  • El repositorio de contribución (https://github.com/symfony/recipes-contrib): contiene las recipes creadas por la comunidad. Está garantizado el funcionamiento de todas ellas, pero sus paquetes asociados pueden no recibir mantenimiento. Symfony Flex siempre le pedirá permiso antes de instalar cualquiera de estas recipes.

Por lo tanto, las recipes Flex encapsulan las dependencias Composer con una configuración predeterminada. Para simplificar la instalación de las recipes, Symfony Flex utiliza algunas veces un sistema de alias que permite recorrer el nombre de las recipes en función del nombre original de las dependencias Composer. De esta manera, el paquete Composer llamado sensio/framework-extra-bundle integra el soporte de las anotaciones en Symfony, tiene un alias anotation que se puede usar en el comando de instalación.

3. Las recipes Symfony

Las recipes Symfony se describen en un archivo llamado manifest.json, cuyo formato es muy similar al archivo composer....

Entornos

1. Aspectos principales y contribuciones

Un proyecto de sitio o aplicación web suele tener varias copias. Por ejemplo, se instala en el servidor de producción, en las estaciones de trabajo de los diversos desarrolladores que participan en él o en servidores de prueba, preproducción, recipes, etc.

Estas diferentes copias no tienen las mismas expectativas y es importante poder cumplirlas. No usan las mismas bases de datos, no requieren el mismo tipo de depuración y, potencialmente, tienen diferentes configuraciones aplicativas. Los entornos son una funcionalidad importante de Symfony. Permiten que el proyecto reaccione de manera diferente dependiendo del «modo» elegido para ejecutarlo.

Históricamente, Symfony define entornos prod, dev y test. Corresponden a nombres predefinidos desde Symfony 2, pero Symfony 5 permite elegir el nombre deseado para un entorno. El archivo .env ubicado en la raíz del proyecto es la clave de este sistema de entorno y en sus comentarios describe un orden para cargar archivos de entorno. Este archivo también contiene una variable de entorno APP_ENV (de forma predeterminada, se establece en dev) para especificar el entorno actual en el proyecto.

2. Archivos de configuración

Por lo tanto, el archivo de configuración principal para entornos es el archivo .env. Puede haber otros archivos en este directorio del proyecto y su carga se establece en el siguiente orden:...

Carga automática de clases

La carga automática de clases (o autoload) es un concepto clave de Symfony.

La organización de un proyecto Symfony está masivamente orientada a objetos: aparte de los controladores front y la consola, los archivos PHP que contienen código procedimental son casi inexistentes. En la práctica, cada archivo PHP de un proyecto contiene una clase y este archivo se coloca en un lugar específico para facilitar la carga de la clase que contiene.

Esta organización no es específica de Symfony, sino de Composer. Composer puede cargar automáticamente todas sus clases gracias a la configuración de la sección autoload del archivo composer.json.

1. El estándar PSR-4

En un proyecto Symfony, la sección autoload del archivo composer.json contiene por defecto la siguiente configuración:

{   
   "autoload": {   
       "psr-4": { "App\\": "src/" }   
   }   
} 

Este último configura un autocargador de clase de tipo PSR-4. El estándar PSR-4 se presenta en el capítulo Implementación de un proyecto Symfony, en la sección Reglas y convenciones para la organización del proyecto. Esta configuración significa que el prefijo...

La consola

1. Presentación

La consola es la herramienta que permite interactuar con una aplicación Symfony en la línea de comandos (CLI o Command Line Interface).

A diferencia de la interfaz web, a la que se accede a través del controlador front, la consola es una herramienta de desarrollo y en ningún caso está destinada a su utilización por parte de los usuarios de la aplicación.

La consola se encuentra en la carpeta bin y se corresponde con el archivo console. Es un archivo PHP, por lo que la consola se puede ejecutar de esta manera (en un intérprete de comandos o shell):

php bin/console 

Al ejecutar el archivo tal cual, solo se muestra una lista de comandos. En la práctica, usará diferentes argumentos, el más importante de los cuales es el nombre del comando.

Nota para los usuarios de sistemas Unix

Dado que este archivo tiene un shebang, puede utilizar el siguiente acceso directo:

contenedor/consola 

En este caso, asegúrese de que, además de los permisos de lectura, tiene derechos de ejecución en este archivo.

2. Los comandos

La consola se utiliza para lanzar comandos. Este es su único uso. Cada comando es responsable de realizar una tarea determinada. Por ejemplo, estas tareas incluyen el borrado de la memoria caché, ayudar al desarrollador generando automáticamente ciertos archivos, actualizar la base de datos o depurar partes de la aplicación....

Herramientas para la depuración

1. El profiler Symfony

El profiler Symfony es una herramienta que se integra con todas las páginas de su aplicación o sitio web tan pronto como se define el entorno como dev. El profiler tiene la forma de una barra de depuración presente en la parte inferior de las páginas de la aplicación cuando esta última se solicita en un navegador web.

images/03EI02N1.png

El profiler Symfony se muestra en un controlador recién generado e indica la versión del framework (5.4.10) a la derecha

El profiler Symfony permite tener una visión general de toda la información relacionada con la petición recibida, así como la respuesta devuelta para una acción determinada, como:

  • los errores y excepciones que ocurrieron durante la ejecución del procesamiento,

  • la estructura de los formularios invocados,

  • la información de autenticación (si se implementan las funciones de seguridad Symfony),

  • las consultas SQL emitidas a la base de datos.

Por lo tanto, al hacer clic en el icono asociado con la información de la base de datos (marcado en un círculo en la siguiente captura de pantalla), podemos ver las consultas SQL emitidas por la aplicación a la base de datos.

images/cap3_pag28.png

A continuación, el profiler Symfony muestra información sobre la ejecución de la consulta SQL y la propia consulta:

images/cap3_pag29.png

El menú de navegación situado a la izquierda permite...