Error en un controlador Symfony que responde a peticiones JSON

Soy nuevo en el desarrollo de aplicaciones web y Symfony me resultó un framework bastante impresionante. Ahora me choqué con un problema a la hora de realizar una petición JSON desde el controlador que me devuelve una redirección a una URL que no existe. El método de mi controlador es este:

/**
 * @Route("/listusuariojson")
 * @Template()
 */
public function userlistAction()
{
    $data = $this->get('sigot.serviciosigot')->toArray($this->getDoctrine()->getManager()->getRepository('adminBundle:Eprofesor')->findAll());
 
    return new Response(json_encode($data));
}

Este es el mensaje de error que me da:

Unable to find template "adminBundle:listusuariojson.html.twig

Respuestas

#1

El problema está en la anotación @Template() que le dice a Symfony: "busca automáticamente la mejor plantilla Twig para responder a esta petición y utilízala". La plantilla que se busca tiene un nombre generado automáticamente a partir del nombre de tu controlador + acción. Por eso el mensaje de error dice que no encuentra es plantilla Twig con el nombre listusuariojson.html.twig.

En tu caso, como respondes directamente con el contenido JSON codificado, no necesitas ninguna plantilla y puedes solucionar el problema directamente eliminando la anotación @Template().

Por otra parte, si vas a enviar contenido JSON codificado, quizás te interese usar la respuesta JsonResponse() en vez de la típica Response(). Algo así:

use Symfony\Component\HttpFoundation\JsonResponse;
 
/**
 * @Route("/listusuariojson")
 */
public function userlistAction()
{
    $data = $this->get('sigot.serviciosigot')->toArray($this->getDoctrine()->getManager()->getRepository('adminBundle:Eprofesor')->findAll());
 
    return new JsonResponse($data);
}