Round_reference_handler не вызывается в Symfony3.4 - PullRequest
2 голосов
/ 04 октября 2019

Я использую сериализатор на symfony3.4.

Мой код выглядит следующим образом.

    $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);

Однако он возвращает ошибку, подобную этой,

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

выглядит circular_reference_handler обратный вызов не вызывается.

Как я могу включить этот обратный вызов ??

1 Ответ

0 голосов
/ 06 октября 2019

В Symfony 3.4 обработчик циклических ссылок был установлен методом Normalizer::setCircularReferenceHandler(callable) вместо опции контекста сериализации.

Для Symfony 3.4 необходимо использовать следующее:

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

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

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

устарело с версии 4.2 : метод setCircularReferenceHandler() устарел с Symfony 4.2. Вместо этого используйте клавишу circular_reference_handler контекста.

...