Ver índice de contenidos del libro

5.2. Un controlador sencillo

A pesar de que un controlador puede ser cualquier código ejecutable PHP (una función, un método en un objeto o un Closure), en Symfony2 un controlador suele ser un método dentro de un objeto de tipo controlador. Los controladores también se conocen como acciones.

// src/Acme/HelloBundle/Controller/HelloController.php
 
namespace Acme\HelloBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
 
class HelloController
{
    public function indexAction($name)
    {
      return new Response('<html><body>Hello '.$name.'!</body></html>');
    }
}

Truco Ten en cuenta que el controlador es el método indexAction, que se encuentra dentro de una "clase controlador" (HelloController). No te dejes confundir por la nomenclatura: una clase controlador simplemente es una forma cómoda de agrupar varios controladores/acciones relacionados. Generalmente, la clase controlador contiene varios controladores (por ejemplo, updateAction, deleteAction, etc.).

Este controlador es bastante sencillo, pero vamos a analizarlo línea por línea:

  • Línea 3: Symfony2 utiliza los namespaces de PHP 5.3 para asignar un "espacio de nombres" completo a la clase del controlador. La palabra clave use importa la clase Response, que la misma que nuestro controlador debe devolver.
  • Línea 6: el nombre de clase es la concatenación del nombre de tu clase controlador (es decir Hello) y la palabra Controller. Esta es una convención que proporciona consistencia a los controladores y permite hacer referencia sólo a la primera parte del nombre (es decir, Hello) en la configuración del enrutador.
  • Línea 8: cada acción en una clase controlador se sufija con Action, pero en la configuración de enrutado se utiliza solo el nombre corto de la acción (index). En la siguiente sección, se crea una ruta asociada a esta acción. Así se verá cómo las partes variables de la ruta (por ejemplo, {name}) se convierten en argumentos para el método de la acción (por ejemplo, $name).
  • Línea 10: el controlador crea y devuelve un objeto Response.