Return a JSON array from a Controller in Symfony Return a JSON array from a Controller in Symfony symfony symfony

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