Symfony 2.1, el libro oficial

Capítulo 5. El controlador

Un controlador es una función PHP creada por ti y que se encarga de obtener la información de la petición HTTP y de generar y devolver la respuesta HTTP (en forma de objeto de tipo Response de Symfony2). La respuesta puede ser una página HTML, un documento XML, un array JSON serializado, una imagen, una redirección a otra página, un error de tipo 404 o cualquier otra cosa que se te ocurra. El controlador contiene toda la lógica que tu aplicación necesita para generar el contenido de la página.

Para ver lo sencillo que es esto, echemos un vistazo a un controlador real de Symfony2. El siguiente controlador genera una página que simplemente imprime Hello world!:

use Symfony\Component\HttpFoundation\Response;

public function helloAction()
{
    return new Response('Hello world!');
}

El objetivo de un controlador siempre es el mismo: crear y devolver un objeto Response. Para ello, a veces obtiene información de la petición, o busca un recurso en la base de datos, envía un correo electrónico, o guarda información en la sesión del usuario. Independientemente de lo que haga, el controlador siempre devuelve un objeto Response que se utiliza para generar la respuesta que se envía al usuario.

Como ves ni Symfony se comporta de forma automágica ni existe más requisitos de los cuales preocuparse. Estos son algunos ejemplos de casos comunes:

  • Controlador A prepara un objeto Response que genera el contenido HTML de la portada del sitio.
  • Controlador B lee el parámetro slug de la petición para cargar una entrada del blog desde la base de datos y crea un objeto Response para mostrar ese blog. Si el slug no se puede encontrar en la base de datos, crea y devuelve un objeto Response con un código de estado de error 404.
  • Controlador C procesa la información enviada en un formulario de contacto: lee la información del formulario desde la petición, guarda la información del contacto en la base de datos y envía mensajes de correo electrónico con la información de contacto al administrador del sitio web. Por último, crea un objeto Response que redirige el navegador del cliente desde el formulario de contacto a la página de agradecimiento.