symfony3 controller route - parte 2

como habiamos visto
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

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable