В настоящее время я пытаюсь сериализовать массив с круговыми ссылками. Для обработки циклических ссылок я взял код из 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". Я не понимаю, почему круговой обработчик, который я использовал, не работает.

Возможно, в этом случае лучше всего было бы проинструктировать Doctrine выполнять дополнительную ленивую загрузку в ссылочном объявлении в ваших объектах, как показано в примере ниже:
/**
* @ORM\ManyToMany(targetEntity = "Commande", fetch = "EXTRA_LAZY")
*/
public $commande_produits;