Symfony - Бесконечный цикл при обработке циклических ссылок

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

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
0
510
1

Ответы 1

Возможно, в этом случае лучше всего было бы проинструктировать Doctrine выполнять дополнительную ленивую загрузку в ссылочном объявлении в ваших объектах, как показано в примере ниже:

/**
 * @ORM\ManyToMany(targetEntity = "Commande", fetch = "EXTRA_LAZY")
 */
public $commande_produits;

Другие вопросы по теме