JMS 序列化程序无法处理序列化循环

JMS Serializer unable to handle serialization loop

昨晚,我的网络应用死机了,返回给用户的是白屏。没过多久就找到了根本原因:PHP 是 运行 内存不足。

追查问题后,我断定JMS Serializer未能处理序列化循环。

我有 class ProductGroup,其中有 Product 个对象(列表)。现在,每个 Product 指的是它所属的一个组。因此,当用户尝试序列化 ProductGroup 时,它会这样做,然后在跳回 ProductGroup(刚刚序列化)时继续序列化每个 Product,从而有效地创建一个序列化循环。

我设法解决了这个问题,但将 @Exclude 放在 Product::group 属性 上。

所以,问题是:关于序列化,我还有其他选择吗? JMS Serializer 是否有可能无法找出循环?

您可以尝试在 ProductGroup->products 和 Product->group 上设置 MaxDepth 以确保它不会进入循环。此外,将您的方法与组 + 产品和产品 + 组的不同序列化组一起使用可以缓解这种情况,并确保您在获取单个产品时仍然可以拥有关联的组。

关于你的第二个问题,在 Doctrine 中甚至不鼓励在两个方向上都有引用,所以 JMS\Serializer 抛出某种异常而不是尝试 "fix" 这似乎是预期的行为。