Return a JSON array from a Controller in Symfony
I think the @darkangelo answer need explainations.
The findAll()
method return a collection of objects.
$categorias = $this->getDoctrine() ->getRepository('AppBundle:Categoria') ->findAll();
To build your response, you have to add all getters of your entities to your response like :
$arrayCollection = array();foreach($categorias as $item) { $arrayCollection[] = array( 'id' => $item->getId(), // ... Same for each property you want );}return new JsonResponse($arrayCollection);
Use QueryBuilder
allows you to return results as arrays containing all properties :
$em = $this->getDoctrine()->getManager();$query = $em->createQuery( 'SELECT c FROM AppBundle:Categoria c');$categorias = $query->getArrayResult();return new JsonResponse($categorias);
The getArrayResult()
avoids need of getters.
You need to do this (based on previous answer):
public function getAllCategoryAction() { $em = $this->getDoctrine()->getManager(); $query = $em->createQuery( 'SELECT c FROM AppBundle:Categoria c' ); $categorias = $query->getArrayResult(); $response = new Response(json_encode($categorias)); $response->headers->set('Content-Type', 'application/json'); return $response;}
It works perfect with any Query that Doctrine returns as array.
/** * @Route("/api/list", name="list") */public function getList(SerializerInterface $serializer, SomeRepository $repo): JsonResponse{ $models = $repo->findAll(); $data = $serializer->serialize($models, JsonEncoder::FORMAT); return new JsonResponse($data, Response::HTTP_OK, [], true);}