Organización del código en Symfony

Estructura de los directorios en un proyecto Symfony y su principal punto de entrada a la configuración

Contenido modificable

Si ves errores o quieres modificar/añadir contenidos, puedes crear un pull request. Gracias

La estructura de una aplicación Symfony es flexible, pero se recomienda la siguiente:

  • app/ La configuración de la aplicación, plantillas y traducciones
  • bin/ Archivos ejecutables (por ejemplo: bin/console)
  • src/ El código PHP del proyecto
  • tests/ Tests automáticos (por ejemplo: Unit tests)
  • var/ Archivos generados (cache, logs, etc)
  • _vendor/ _Dependencias de terceros
  • web/ El directorio web raíz

El directorio web/

El directorio web/ es donde se almacenan los archivos públicos y estáticos como imágenes, CSS y JavaScript. También es donde se sitúan los front controller, como el siguiente production controller:

// web/app.php
require_once __DIR__.'/../var/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';

use Symfony\Component\HttpFoundation\Request;

$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();

El controller primero arranca la aplicación mediante la clase AppKernel. Después crea el objeto Request usando las variables globales PHP y lo pasa al kernel. El último paso es enviar el contenido de la respuesta creado por el kernel al usuario.

El directorio app/

La clase AppKernel es el principal punto de entrada de la configuración de la aplicación, y se guarda en el directorio app/.

Esta clase debe implementar dos métodos:

registerBundles()

Debe devolver un array con todos los bundles que se necesitan para hacer funcionar la aplicación.

registerContainerConfiguration()

Carga la configuración de la aplicación.

El autoloading se maneja directamente desde Composer, lo que significa que puedes usar cualquier clase PHP sin hacer nada. Todas las dependencias se guardan bajo el directorio vendor/, aunque puedes guardarlos donde quieras, globalmente en tu servidor o localmente en tus proyectos.

El directorio vendor/

Normalmente las aplicaciones dependen de librerías de terceros y se guardan en /vendor. Nunca se ha de tocar este directorio ya que se maneja completamente desde Composer. Este directorio ya contiene las librerías de Symfony, SwiftMailer, DoctrineORM, Twig y algunas otras librerías y bundles por defecto.

El directorio var/

Las aplicaciones de Symfony contienen archivos de configuración definidos en varios formatos (YAML, XML, PHP, etc). En lugar de analizar y combinar estos archivos en cada request, Symfony utiliza su propio sistema de cache. La configuración de la aplicación sólo se analiza en el primer request, y después se compila a código PHP y se guarda en el directorio var/cache/.

En el entorno de desarrollo, Symfony sabe actualizar la cache cuando cambias un archivo. Pero en el entorno de producción, para mejorar la velocidad, depende de tí limpiar la cache cuando actualizas el código o cambias su configuración. Puedes ejecutar este comando para limpiar la cache en el entorno prod:

php bin/console cache:clear --env=prod

Cuando se desarrolla una aplicación lo normal es que de vez en cuando se produzcan errores. Los archivos log en el directorio var/logs te dirán todo acerca de los requests y te ayudarán a resolver los problemas fácilmente.

El directorio bin/

Cada aplicación viene con una herramienta de comandos de consola (bin/console) que ayuda a mantener la aplicación. Proporciona comandos que impulsan la productividad automatizando tareas tediosas y repetitivas.

Para ver las capacidades de esta herramienta puedes utilizar el siguiente comando:

php bin/console

La opción --help ayuda a descubrir el uso de un comando:

php bin/console debug:router --help