Ich habe ein Problem mit der Serialisierung von Entitäten mit vielen Beziehungen unter Verwendung von Gruppen. Ich habe ein Problem damit zusammenhängende Entitäten zu serialisieren.
Nehmen wir an, ich habe zwei Entitäten: Produkt und verwandtes Element.
%Vor%Element entity hat eine ähnliche Struktur:
%Vor%Mein Problem ist, dass ich beim Serialisieren von Produkt mit der Gruppendatei 'Details' nur IDs von Elementen serialisieren möchte, aber wenn Sie sehen, dass die Entität dieselben Gruppen wie Produkt definiert hat (falls ich Details des Elementobjekts benötigen würde) weil ich Gruppen für alle meine Entitäten vereinheitlichen und verhindern möchte, dass hunderte von Gruppen wie 'product_details', 'element_details' und so weiter entstehen.
Gibt es eine Möglichkeit, die Serialisierungsgruppe zu ändern, wenn ich eine Beziehung oder etwas ähnliches besuche? Handler vielleicht oder so ähnlich?
Grüße und danke für jede Hilfe
Leider kann man das nicht wirklich (aber weiterlesen ;-)), zumindest nicht ohne Änderungen an der Serializer-Bibliothek. Der Täter ist, dass die Liste der Gruppen in einem GroupExclusionStrategy
(das von Context
referenziert wird) in dem Moment, in dem Sie den Serialisierungsprozess starten, festgelegt ist. Es gibt tatsächlich eine Behauptung innerhalb des Codes, die eine Änderung der Ausschlussstrategie verhindert, sobald die (De-) Serialisierung ausgeführt wird.
Aber in meinem Projekt hatte ich genau das gleiche Problem, und ich habe die notwendigen Änderungen in den Serializer-Code gehackt. Ich habe den Code ein wenig aufgeräumt und ihn auf Github hochgeladen ( Ссылка ).
Es fügt neue Eigenschaftsmetadaten hinzu, mit denen Sie die Gruppen beim Abstieg in Unterobjekte hinzufügen, entfernen oder überschreiben können. Mit Anmerkungen sieht es so aus:
%Vor%Sie sollten auch XML- oder Yaml-Metadaten verwenden können, dies ist jedoch nicht getestet, da ich sie nicht verwende und noch keine Testfälle hinzugefügt habe. Sehen Sie sich die Referenzdokumentation an. Da ich auch noch keine Optimierungen vorgenommen habe, könnten Ihre Entitäten, wenn sie wirklich groß und tief verschachtelt sind, bemerkenswerte Auswirkungen auf die Leistung haben.
Bitte lassen Sie mich wissen, wenn Sie das nützlich finden, oder wenn Sie irgendwelche Vorschläge haben, denn wenn dies nicht nur von mir benötigt wird, werde ich einige Tests hinzufügen und versuchen, sie upstream zu übermitteln.
Eine Lösung dafür ist eigentlich in offizielle Dokumentation .
Die von @aferber vorgeschlagene Lösung scheint in vielen Punkten besser zu sein: leichter zu pflegen, weniger ausführlich, flexibler ...
Tags und Links symfony doctrine2 jmsserializerbundle