Serializer using Normalizer returns nothing when using setCircularReferenceHandler Serializer using Normalizer returns nothing when using setCircularReferenceHandler symfony symfony

Serializer using Normalizer returns nothing when using setCircularReferenceHandler


I tried to reproduce your error, and for me everything worked as expected (see code samples below).

So, your setCircularReferenceHandler() works fine.

Maybe try to run my code, and update it with your real entities and data sources step by step, until you see what causes the error.

Test (instead of your controller):

class SerializerTest extends \PHPUnit\Framework\TestCase{    public function testIndex()    {        $media = new Media();        $author = new Author();        $media->setAuthor($author);        $author->addMedia($media);        $data = [$media];        $normalizer = new JsonSerializableNormalizer();        $normalizer->setCircularReferenceLimit(1);        $normalizer->setCircularReferenceHandler(function($object){            /** @var Media $object */            return $object->getId();        });        $serializer = new Serializer([$normalizer], [new JsonEncoder()]);        $json = $serializer->serialize($data, 'json');        $this->assertJson($json);        $this->assertCount(1, json_decode($json));    }}

Media entity

class Media implements \JsonSerializable{    /**     * @var int     *     * @ORM\Column(name="id", type="integer")     * @ORM\Id     * @ORM\GeneratedValue(strategy="AUTO")     */    private $id;    /**     * @var Author     *     * @ORM\ManyToOne(targetEntity="Author", inversedBy="medias")     * @ORM\JoinColumn(name="author_id", referencedColumnName="id")     */    private $author;    /**     * {@inheritdoc}     */    function jsonSerialize()    {        return [            "id"        => $this->getId(),            "author"    => $this->getAuthor(),        ];    }    //todo: here getter and setters, generated by doctrine}

Author entity

class Author implements \JsonSerializable{    /**     * @var int     *     * @ORM\Column(name="id", type="integer")     * @ORM\Id     * @ORM\GeneratedValue(strategy="AUTO")     */    private $id;    /**     * @var Media[]     *     * @ORM\OneToMany(targetEntity="Media", mappedBy="author")     */    private $medias;    /**     * {@inheritdoc}     */    function jsonSerialize()    {        return [            "id"        => $this->getId(),            "medias"    => $this->getMedias(),        ];    }    //todo: here getter and setters, generated by doctrine}