Symfony3.4上未调用circular_reference_handler

问题描述 投票:1回答:1

我在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回调。

如何启用此回调?

php symfony serializer
1个回答
0
投票

在Symfony 3.4中,循环引用处理程序是通过a方法 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键。

© www.soinside.com 2019 - 2024. All rights reserved.