0

昨夜、Web アプリが停止し、白い画面がユーザーに返されました。根本的なケースを見つけるのにそれほど時間はかかりませんでした:PHPメモリが不足していました。

JMS Serializer問題を追跡した後、シリアル化ループの処理に失敗したと結論付けました。

オブジェクト(リスト)ProductGroupの数を持つクラスがあります。Productここで、それぞれProductが所属するグループを指します。そのため、ユーザーが serialize を試みるとProductGroup、それが実行され、(シリアル化されたばかりの)Productにジャンプして戻ると、それぞれがシリアルProductGroup化され、効果的にシリアル化ループが作成されます。

私はそれを修正することができましたが、プロパティを付け@ExcludeましProduct::groupた。

ですから、問題は次のとおりです。シリアル化に関して別のオプションはありますか? JMS Serializerループを理解できない可能性はありますか?

4

1 に答える 1

1

ProductGroup->products と Product->group を設定MaxDepthして、ループにならないようにすることができます。また、グループ + 製品と製品 + グループの異なるシリアル化グループでアプローチを使用すると、これが軽減され、単一の製品を取得するときに関連するグループを引き続き使用できるようになります。

2 番目の質問に関しては、Doctrine では両方向に参照を持つことさえ推奨されていないため、JMS\Serializer は「修正」しようとする代わりに、何らかの例外をスローして、予想される動作のように見えます。

于 2015-08-24T20:22:11.073 に答える