el unico objetivo de un controlador es devolver un objeto del tipo Response.
como habiamos visto antes, se puede devolver una cadena de texto pero no es lo mas productivo.
en la vida real lo que deberemos devolver es algun tipo de contenido util, veamos para empezar el objeto de tipo template (este tipo de objeto, asi como muchos otros, los brinda symfony a traves de "services")
para esto nuestro controlador ahora debera extender de Controller (de FrameworkBundle)
y para acceder a los servicios lo haremos a traves de un contenedor (arreglo, mejor dicho objeto, que a traves de un unico metodo get, nos devuelve el deseado, para nuestro ejemplo necesitamos el de "templating")
$this->container->get('templating');// obtenemos el objeto templating
$templating->render('text/hello.html.twig', ['name'=>$name]);// renderizamos un template, y le enviamos una variable
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class DefaultController extends Controller
{
/**
* @Route("/hello/{name}", name="hello")
*/
public function helloAction($name)
{
$templating = $this->container->get('templating');
$html=$templating->render('test/hello.html.twig', ['name'=>$name]);
return new Response($html);
}
}
{# app/Resources/views/test/hello.html.twig #}
<h1> hola <b>{{ name }}</b></h1>
entonces, si llamamos, a nuestra aplicacion a:
http://localhost:8000/hello/israel
obtendremos:
hola israel
tip:
la renderizacion de templates es tan comun, que el codigo anterior se puede reemplazar por:
return $this->render('test/hello.html.twig', [ | |
'name' => $name | |
)); |
No hay comentarios:
Publicar un comentario