Прошлой ночью мое веб-приложение умерло с белым экраном, возвращаемым пользователю. Это не займет много времени, чтобы выяснить основной случай: PHP
не хватало памяти.
Проследив проблему, я пришел к выводу, что JMS Serializer
не удалось обработать цикл сериализации.
у меня урок ProductGroup
который имеет номер Product
объекты (список). Теперь каждый Product
относится к группе, к которой он принадлежит. Итак, когда пользователь пытается сериализовать ProductGroup
, он делает это, а затем приступает к сериализации каждого Product
когда он возвращается к ProductGroup
(который был только что сериализован) эффективно создает цикл сериализации.
Мне удалось это исправить, но положить @Exclude
на Product::group
имущество.
Итак, вопрос: У меня есть другой вариант, когда дело доходит до сериализации? Возможно ли, что JMS Serializer
не в состоянии выяснить цикл?
Вы можете попробовать установить MaxDepth
в ProductGroup-> products и Product-> group, чтобы убедиться, что он не зацикливается. Кроме того, использование вашего подхода с различными группами сериализации для групп + продукт и продукт + группа может смягчить это и гарантировать, что у вас все еще может быть связанная группа при получении одного продукта.
Что касается вашего второго вопроса, наличие ссылок в обоих направлениях даже не рекомендуется в Doctrine, поэтому JMS \ Serializer выдает какое-то исключение вместо того, чтобы пытаться «исправить», это похоже на ожидаемое поведение.
Других решений пока нет …