Ich versuche, einen einfachen Kalender mit Symfony zu erstellen. Dazu möchte ich die Ereignisse des ausgewählten Monats über AJAX anfordern. Für jedes Ereignis können mehrere Benutzer verbunden sein.Entity für kleinere Ausgabe transformieren
nun das Ereignis Abrufen ist ganz einfach
$events = $this->em->getRepository('AppBundle:Event')
->findByYearMonth($this->getUser(), $year, $month);
$encoder = new JsonEncoder();
$normalizer = new ObjectNormalizer();
$normalizer->setCircularReferenceHandler(function ($object) {
return $object->getId();
});
$serializer = new Serializer([$normalizer], [$encoder]);
$serialized = $serializer->serialize($events, 'json');
$response = new Response($serialized);
$response->headers->set('Content-Type', 'application/json');
ich setCircularReferenceHandler
benötigt, weil offensichtlich Benutzer die Ereignisse haben auch mit ihnen verbunden sind.
In meinem Test habe ich derzeit nur 2 Ereignisse, aber ich bekomme eine Antwort von ~ 50kb, einfach weil es von den Benutzerobjekten aufgebläht wird. Alles, was ich wirklich will, ist Benutzer-ID und Name, aber es ruft alle anderen Felder (und andere verbundene Entitäten) ab.
Der zirkuläre Referenzhandler selbst wird erst aktiviert, wenn der Benutzer bereits zurückgegeben wurde (und fängt das Ereignis innerhalb des Benutzers ab, der den Benutzer ursprünglich abgerufen hat).
Ich habe bereits darüber gesucht, aber fand kein einziges Ergebnis, das in der Art und Weise ging, wie ich wollte (die meisten waren über Formulare, allgemeine Serialisierung, etc).
Die einzige Idee, die ich hatte, war, eine Methode zu der Event-Entität hinzuzufügen, zB getSimple
, wo ich manuell einige Parameter einstelle und outers auslasse (muss aber auch für alles was angeschlossen ist). Das schien ziemlich unsauber, daher frage ich hier.
TL; DR
Ich möchte so etwas wie
[
{"id":1, "name":"foo", "users":[
{"id":1, "name":hans"},
{"id":2, "name":"jack"},...
]},...
]
aber ich habe so etwas wie
[
{"id":1, "name":"foo", "users":[
{"id":1, "name":hans", "events":[1,{"id":3, "name":"this hasnt already been shown"}], "userfield":"var", "anotheruserfield":"bar", "someOtherRelation":{"bla"},
{"id":2, "name":"jack", "events":[1,{"id":3, "name":"this hasnt already been shown"}], "userfield":"var", "anotheruserfield":"bar", "someOtherRelation":{"bla"}},...
]},...
]
Ja, Ausschluss ist das Wort, das ich schon immer gesucht haben! Während ja, kann das meine Frage vielleicht lösen, ich möchte den User mit 'Exclude' kommentieren, nur weil ich von einem Event zu viel komme. Deshalb ging ich mit einem benutzerdefinierten Normalizer – kero