相关疑难解决方法(0)

已检测到循环引用(配置限制:1)Serializer SYMFONY

您好我的项目Symfony我想将我的实体转换为数组Json,所以我选择序列化器来制作这个,我也想忽略一些属性,因为转换太长了,所以我读了文档Symfony http:// symfony. com/doc/current/components/serializer.html#ignoring-attributes 我复制了这段代码

 $flowsites =    $this->getDoctrine()->getRepository("QSCORBundle:Flow_Site")->findAll();
 $normalizer = new ObjectNormalizer();
 $normalizer->setIgnoredAttributes(array('company')); 
 $encoder = new JsonEncoder();

 $serializer = new Serializer(array($normalizer), array($encoder));
 $flow_sites = $serializer->serialize($flow_sites, 'json');

 var_dump( $flow_sites );
 die();
Run Code Online (Sandbox Code Playgroud)

在此之后错误生成已检测到循环引用(配置限制:1) 因此,为了解决此问题,我对我的代码进行了一些更改

$normalizer = new ObjectNormalizer(null);
$normalizer->setIgnoredAttributes(array('company', 'origin'));
$normalizer->setCircularReferenceHandler(function ($object) {
    return $object->getId();
});
$encoder = new JsonEncoder();
//$serializer = $this->get('serializer');
$serializer = new Serializer(array($normalizer), array($encoder));

$flowsites = $this->getDoctrine()->getRepository("QSCORBundle:Flow_Site")->findAll();
$jsonflowsites =  $serializer->serialize( $flowsites, 'json');
var_dump( $jsonflowsites );
die();
Run Code Online (Sandbox Code Playgroud)

serialization json symfony

14
推荐指数
0
解决办法
2692
查看次数

Symfony序列化程序 - 设置循环引用全局

有没有办法在Symfony(而不是JMSSerializer)的序列化程序组件中使用任何配置或类似的东西设置循环引用限制?

我有一个带有FOSRestBundle的REST应用程序和一些包含其他应该序列化的实体的实体.但我遇到了循环引用错误.

我知道如何设置它:

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

$normalizer->setCircularReferenceHandler(function ($object) {
     return $object->getName();
});
Run Code Online (Sandbox Code Playgroud)

但这必须在多个控制器中完成(对我来说是开销).我想在config(.yml)中全局设置它,例如:

framework: 
    serializer:
        enabled: true
        circular_limit: 5
Run Code Online (Sandbox Code Playgroud)

找不到序列化程序API参考,所以我想知道它是否可能?

rest serialization circular-reference symfony fosrestbundle

10
推荐指数
2
解决办法
3014
查看次数