I am trying return a JSON response from a controller in Symfony 2. Form example, in Spring MVC I can get a JSON response with @ResponseBody annotattion. I want get a JSON response, no mtter if it is a JSON Array or a Json Object, then, manipulate it with javascript in the view.
I try the next code:
/**
     * @Route(
     *      "/drop/getCategory/",
     *      name="getCategory"
     * )
     * @Method("GET")
     */
    public function getAllCategoryAction() {
        $categorias = $this->getDoctrine()
                           ->getRepository('AppBundle:Categoria')
                           ->findAll();
        $response = new JsonResponse();
        $response->setData($categorias);
        $response->headers->set('Content-Type', 'application/json');
        return $response;
    }
But I get [{},{}] as Response in the browser. I try with $response = new Response(json_encode($categorias)); too, but I get the same result. 
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With