La anotación @Template asocia un controlador con un nombre de plantilla:
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
/**
* @Template("SensioBlogBundle:Post:show.html.twig")
*/
public function showAction($id)
{
// consigue el Post
$post = ...;
return array('post' => $post);
}
Cuando utilizas la anotación @Template, el controlador debe regresar un arreglo de parámetros para pasarlo a la vista en lugar de un objeto Respuesta.
Truco
Si la acción devuelve un objeto Respuesta, la anotación @Template simplemente se omite.
Si la plantilla se nombra después del controlador y los nombres de acción, como en el caso del ejemplo anterior, puedes omitir incluso el valor de la anotación:
/**
* @Template
*/
public function showAction($id)
{
// consigue el Post
$post = ...;
return array('post' => $post);
}
Nota
Si estás utilizando PHP como tu sistema de plantillas, necesitas hacerlo explícito:
/**
* @Template(engine="php")
*/
public function showAction($id)
{
// ...
}
Y si los únicos parámetros para pasar a la plantilla son los argumentos del método, puedes utilizar el atributo vars en lugar de devolver un arreglo. Esto es muy útil en combinación con la anotación @ParamConverter:
/**
* @ParamConverter("post", class="SensioBlogBundle:Post")
* @Template("SensioBlogBundle:Post:show.html.twig", vars={"post"})
*/
public function showAction(Post $post)
{
}
que, gracias a las convenciones, es equivalente a la siguiente configuración:
/**
* @Template(vars={"post"})
*/
public function showAction(Post $post)
{
}
Puedes hacer que sea aún más conciso puesto que todos los argumentos del método se pasan automáticamente a la plantilla si el método devuelve null y no se define el atributo vars:
/**
* @Template
*/
public function showAction(Post $post)
{
}