Saltar al contenido

Devolver un JSON array desde un controlador en Symfony

Es imprescindible comprender el código de forma correcta antes de adaptarlo a tu trabajo y si ttienes algo que aportar puedes comentarlo.

Solución:

Creo que la respuesta de @darkangelo necesita explicaciones.

Él findAll() El método devuelve una colección de objetos.

$categorias = $this->getDoctrine()
                   ->getRepository('AppBundle:Categoria')
                   ->findAll();

Para construir su respuesta, debe agregar todos los captadores de sus entidades a su respuesta como:

$arrayCollection = array();

foreach($categorias as $item) 
     $arrayCollection[] = array(
         'id' => $item->getId(),
         // ... Same for each property you want
     );


return new JsonResponse($arrayCollection);

Usar QueryBuilder le permite devolver resultados como matrices que contienen todas las propiedades:

$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
    'SELECT c
    FROM AppBundle:Categoria c'
);
$categorias = $query->getArrayResult();

return new JsonResponse($categorias);

Él getArrayResult() evita la necesidad de captadores.

Necesitas hacer esto (basado en la respuesta anterior):

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;

Funciona perfecto con cualquier Query que Doctrine devuelva como 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);

Reseñas y valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *