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
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); }
@javiereguiluz