我在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
回调。
如何启用此回调?
在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
键。