Todas las peticiones web son manejadas por un solo controlador frontal, que es el punto de entrada único de toda la aplicación en un entorno determinado.
Cuando el controlador frontal recibe una petición, utiliza el sistema de enrutamiento para asociar el nombre de una acción y el nombre de un módulo con la URL escrita (o pinchada) por el usuario. Por ejemplo, la siguientes URL llama al script index.php (que es el controlador frontal) y será entendido como llamada a la acción miAccion del módulo mimodulo:
http://localhost/index.php/mimodulo/miAccion
Si no estás interesado en los mecanismos internos de Symfony, eso es todo que necesitas saber sobre el controlador frontal. Es un componente imprescindible de la arquitectura MVC de Symfony, pero raramente necesitarás cambiarlo. Si no quieres conocer las tripas del controlador frontal, puedes saltarte el resto de esta sección.
El controlador frontal se encarga de despachar las peticiones, lo que implica algo más que detectar la acción que se ejecuta. De hecho, ejecuta el código común a todas las acciones, incluyendo:
El controlador frontal por defecto, llamado index.php y ubicado en el directorio web/ del proyecto, es un simple script, como lo muestra el Listado 6-1.
Listado 6-1 - El Controlador Frontal por Omisión
<?php require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php'); $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false); sfContext::createInstance($configuration)->dispatch();
El controlador frontal incluye la configuración de la aplicación, lo que corresponde a los puntos 2, 3 y 4 anteriores. La llamada al método dispatch() del objeto sfController (que es el controlador principal de la arquitectura MVC de Symfony) despacha la petición, lo que corresponde a los puntos 5, 6 y 7 anteriores. El resto de tareas las realiza la cadena de filtros, tal y como se explica más adelante en este capítulo.
Cada entorno dispone de un controlador frontal. De hecho, es la existencia del controlador frontal lo que define un entorno. El entorno se define mediante el segundo argumento que se pasa en la llamada al método ProjectConfiguration::getApplicationConfiguration().
Para cambiar el entorno en el que se está viendo la aplicación, simplemente se elige otro controlador frontal. Los controladores frontales disponibles cuando creas una aplicación con la tarea generate:app son index.php para el entorno de producción y frontend_dev.php para el entorno de desarrollo (suponiendo que tu aplicación se llame frontend). La configuración por defecto de mod_rewrite utiliza index.php cuando la URL no contiene el nombre de un script correspondiente a un controlador frontal. Así que estas dos URL muestran la misma página (mimodulo/index) en el entorno de producción:
http://localhost/index.php/mimodulo/index http://localhost/mimodulo/index
y esta URL muestra la misma página en el entorno de desarrollo:
http://localhost/frontend_dev.php/mimodulo/index
Crear un nuevo entorno es tan fácil como crear un nuevo controlador frontal. Por ejemplo, puede ser necesario un entorno llamado staging que permita a tus clientes probar la aplicación antes de ir a producción. Para crear el entorno staging, simplemente copia web/frontend_dev.php en web/frontend_staging.php y cambia el valor del segundo argumento de ProjectConfiguration::getApplicationConfiguration() a staging. Ahora en todos los archivos de configuración, puedes añadir una nueva sección staging: para establecer los valores específicos para este entorno, como se muestra en el Listado 6-2
Listado 6-2 - Ejemplo de app.yml con valores específicos para el entorno staging
staging:
mail:
webmaster: falso@misitio.com
contacto: falso@misitio.com
all:
mail:
webmaster: webmaster@misitio.com
contacto: contacto@mysite.comSi quieres ver cómo se comporta la aplicación en el nuevo entorno, utiliza el nuevo controlador frontal:
http://localhost/frontend_staging.php/mimodulo/index
Capítulo original en inglés Chapter 6 - Inside The Controller Layer Traducido por Luciano A. Andrade