我必须序列化一个对象,并且遇到了如此常见的“循环引用错误”
我使用了旧的 Symfony 方法:
$normalizer = new ObjectNormalizer();
// Add Circular reference handler
$normalizer->setCircularReferenceHandler(function ($object) {
return $object->getId();
});
$normalizers = array($normalizer);
$encoders = [new JsonEncoder()];
$serializer = new Serializer($normalizers, $encoders);
这项工作有效,但从 Symfony 4.2 开始,我得到了您在这个问题的标题中看到的异常:
使用上下文的“circular_reference_handler”键代替 Symfony 4.2
我在有关序列化器的 Symfony 文档中找不到任何对此的引用。
https://symfony.com/doc/current/components/serializer.html#handling-circular-references https://symfony.com/doc/current/components/serializer.html#handling-circular-references
有谁知道如何使用这种“上下文关键”而不是旧方法?
不幸的是,它在文档中有点隐藏,但您可以创建一个类而不是使用匿名函数,然后配置序列化器以默认使用此服务。
它是配置参考的一部分:https://symfony.com/doc/current/reference/configuration/framework.html#circular-reference-handler https://symfony.com/doc/current/reference/configuration/framework.html#circular-reference-handler
# config/packages/serializer.yaml
serializer:
circular_reference_handler: 'App\Serializer\MyCircularReferenceHandler'
没有指定接口。相反,该类需要可调用。所以在你的情况下它可能看起来像这样:
class MyCircularReferenceHandler
{
public function __invoke($object)
{
return $object->id;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)