我目前正在尝试序列化具有循环引用的数组。为了处理循环引用,我从Symfony Docs
中获取了代码$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizer = new ObjectNormalizer();
$normalizer->setCircularReferenceLimit(2);
$normalizer->setCircularReferenceHandler(function ($object) {
return $object->getId();
});
$normalizers = array($normalizer);
$serializer = new Serializer($normalizers, $encoders);
$json = $serializer->serialize($myArray, 'json');
但是,当我尝试运行代码时,页面会无限加载,不会抛出异常,也不会生成日志,唯一的恢复方法是终止服务器并重新运行它。
我不能var_dump
变量$myArray
因为它是自引用的,因此使指令无限循环。
array:2 [▼
0 => Commande {#2155 ▼
#commerce: Commerce {#2623 ▶}
#stripe_charge: null
#id: 2
#user: "admin"
#commerce_nom: null
#valide: false
#cloture: false
#paye: false
#livre: false
#date_livraison: null
#livraison_remarque: null
#valide_remarque: null
#cout: CommandeCout {#2812 ▶}
#lieu_livraison: null
#commande_produits: PersistentCollection {#2671 ▶}
#createdAt: DateTime @1520264795 {#2056 ▶}
#updatedAt: DateTime @1520264795 {#2055 ▶}
}
1 => Commande {#2791 ▼
#commerce: Commerce {#2788 ▶}
#stripe_charge: null
#id: 3
#user: "admin"
#commerce_nom: null
#valide: false
#cloture: false
#paye: false
#livre: false
#date_livraison: null
#livraison_remarque: null
#valide_remarque: null
#cout: CommandeCout {#2811 ▶}
#lieu_livraison: null
#commande_produits: PersistentCollection {#2780 ▶}
#createdAt: DateTime @1520339269 {#2797 ▶}
#updatedAt: DateTime @1520339269 {#2796 ▶}
}
]
字段" commande_produits"包含对象" Commande#2155"的引用。我不明白为什么我使用的循环处理程序无法工作。
答案 0 :(得分:0)
也许在这种情况下,最好指示Doctrine在您的实体的引用声明中进行额外的延迟加载,如下例所示:
/**
* @ORM\ManyToMany(targetEntity="Commande", fetch="EXTRA_LAZY")
*/
public $commande_produits;