Friday, February 26, 2016

Return a JSON array from a Controller in Symfony

Often we need to return a JSON response from a controller in Symfony 2 and grab it in jQuery ajax response. Here is the way to do it.
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. After you have got the response, you can use each loop of jquery as follows.

success: function(response) {
        $.each(response, function(i) {
              $.each(this, function(key,val) {
                   console.log(key+ '=>' + val);
                });
           });
}

Source: http://stackoverflow.com/a/34577422

1 comment: