Search code examples
doctrine-ormsymfony4symfony5

Symfony4 returning serialized json repsonse


I'm looking at a new Symfony5 project , where I'm trying to return a JSON response of some data.

I have a Project and a ProjectItem

I have the following:

// Project.php

/**
 * @ORM\OneToMany(targetEntity="App\Entity\ProjectItem", mappedBy="project")
 */
private $projectItems;


// ProjectItem.php

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\Project", inversedBy="projectItems")
 */
private $project;

I have one Project, that can have many ProjectItems

I then have a controller that I'm trying to return a json response:

public function index()
{
    $itemsList = $this->getDoctrine()
        ->getRepository(Project::class)
        ->findAll();

    $items = $this->get('serializer')->serialize($itemsList, 'json');

    return new Response($items, 200);
}

This is currently returning an error:

A circular reference has been detected when serializing the object of class "App\Entity\Project" (configured limit: 1)

Am I using the serializer correctly or are my models incorrectly configured?


Solution

  • Simply use json_encode:

    public function index()
    {
        $itemsList = $this->getDoctrine()
        ->getRepository(Project::class)
        ->findAll();
    
        return new Response(
            json_encode($itemsList), 
            200
        );
    }
    

    or use JsonResponse class:

    return new JsonResponse($itemsList);