Si echas un vistazo al directorio web/
, verás dos archivos PHP llamados index.php
y frontend_dev.php
. Estos archivos se conocen con el nombre de controladores frontales, ya que todas las peticiones de la aplicación se realizan a través de ellos. Pero, ¿por qué tenemos dos controladores frontales si sólo tenemos una aplicación?
Los dos archivos apuntan a la misma aplicación pero se utilizan en diferentes entornos. Cuando se desarrolla una aplicación, salvo que la desarrolles directamente sobre el servidor de producción, necesitas varios entornos:
- El entorno de desarrollo: este es el entorno que utilizan los programadores web cuando modifican la aplicación para añadir nuevas características y corregir errores.
- El entorno de pruebas: este entorno se utiliza para ejecutar automáticamente las pruebas unitarias.
- El entorno intermedio (o entorno "staging"): este entorno lo utiliza el cliente para probar la aplicación e informar sobre los errores que ha encontrado o las características que le faltan a la aplicación.
- El entorno de producción: este es el entorno en el que se ejecuta la aplicación que utilizan los usuarios finales.
¿Qué es lo que diferencia a cada entorno? En el entorno de desarrollo es necesario por ejemplo que la aplicación guarde en el log todos los detalles de cada aplicación para simplificar la depuración, pero la cache tiene que estar deshabilitada para que cualquier cambio realizado se tenga en cuenta de forma instantánea. Por tanto, el entorno de desarrollo se debe optimizar para el programador. El ejemplo más claro es cuando se produce una excepción. Para que el programador detecte lo antes posible la causa del error, Symfony muestra directamente en el navegador toda la información disponible sobre la petición actual:
Por otra parte, en el entorno de producción la cache debe estar habilitada y por supuesto se deben mostrar mensajes de error propios en vez de la información relacionada con la excepción producida. Por tanto, el entorno de producción debe estar optimizado para obtener el máximo rendimiento y para conseguir la mejor experiencia de usuario.
Un entorno en Symfony no es más que un conjunto específico de opciones de configuración. El framework Symfony incluye por defecto tres entornos llamados dev
, test
y prod
. Durante el tutorial del día 22 aprenderás a crear nuevos entornos, como por ejemplo el entorno staging
.
Si abres los archivos de los controladores frontales, verás que su contenido es el mismo salvo la opción que indica el entorno utilizado:
// Archivo web/index.php
<?php
require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);
sfContext::createInstance($configuration)->dispatch();
Nota Definir un nuevo entorno en Symfony es tan sencillo como crear un nuevo controlador frontal. Más adelante se muestra cómo modificar las opciones de un entorno.