whitebear
whitebear

Reputation: 12457

circular_reference_handler is not invoked on Symfony3.4

I am using serializer on symfony3.4.

My code is like this below.

    $encoders = [new JsonEncoder()];
    $normalizers = [new ObjectNormalizer()];
    $serializer = new Serializer($normalizers, $encoders);
    $jsonContent = $serializer->serialize($place, 'json',[
        'circular_reference_handler' => function ($object) {
            return $object->getId();
        }
    ]);
    return new JsonResponse($place);

However it returns the error like this,

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

it looks circular_reference_handler callback is not invoked.

How can I enabled this callback ??

Upvotes: 2

Views: 197

Answers (1)

Nicolai Fröhlich
Nicolai Fröhlich

Reputation: 52513

In Symfony 3.4 the circular reference handler was set by a method Normalizer::setCircularReferenceHandler(callable) instead of a serialization-context option.

You need to use the following for Symfony 3.4:

$encoder = new JsonEncoder();
$normalizer = new ObjectNormalizer();

$normalizer->setCircularReferenceHandler(function ($object) {
    return $object->getName();
});

$serializer = new Serializer([$normalizer], [$encoder]);

Deprecated since version 4.2: The setCircularReferenceHandler() method is deprecated since Symfony 4.2. Use the circular_reference_handler key of the context instead.

Upvotes: 1

Related Questions