Symfony 2.4, el libro oficial

5.1. Ciclo de vida de la petición, controlador, respuesta

Cada petición manejada por un proyecto Symfony2 pasa por el mismo ciclo de vida básico. La plataforma se encarga de todas las tareas repetitivas iniciales y después, pasa la ejecución al controlador, que contiene el código personalizado de tu aplicación:

  1. Cada petición es manejada por un único archivo controlador frontal (por ejemplo, app.php o app_dev.php) el cual es responsable de iniciar la aplicación.
  2. El sistema de enrutamiento (clase Routing) lee la información de la petición (por ejemplo, la URI), encuentra una ruta que coincida con esa información, y lee el parámetro _controller de la ruta.
  3. Se ejecuta el controlador asignado a la ruta y este controlador crea y devuelve un objeto Response.
  4. Las cabeceras HTTP y el contenido del objeto Response se envían de vuelta al cliente.

Crear una página es tan fácil como definir un controlador (paso 3) y hacer una ruta que asocie una URI con ese controlador (paso 2).

Nota Aunque tienen nombres parecidos, un "controlador frontal" es muy diferente de los "controladores" que se explican en este capítulo. Un controlador frontal es un archivo PHP, normalmente pequeño, que se encuentra en el directorio web raíz del proyecto y a través del cual se atienden todas las peticiones del usuario. Una aplicación típica tiene un controlador frontal de producción (por ejemplo, app.php) y un controlador frontal de desarrollo (por ejemplo, app_dev.php). Probablemente nunca necesites editar, ver o preocuparte por los controladores frontales en tu aplicación.