Ich versuche, alle Datensätze abzurufen und sie in einer JSON-Datei anzuzeigen.JMSSerializerBundle und Symfony 2 - Ausgabe Doctrine/ODM zu JSON-Datei
Meine aktuelle Funktion ruft alle Ereignisse ab, die zu einem bestimmten Benutzer gehören.
/**
* create json files from doctrine/mongo
* @Route("/createjson", name="createjson")
*/
public function createJson()
{
// check user authentication
$this->denyAccessUnlessGranted('ROLE_USER', null, 'Unable to access this page!');
$dm = $this->get('doctrine_mongodb')->getManager();
$repository = $dm->getRepository('AppBundle:Event');
$events = $repository->findBy(array('user' => $this->getUser()));
$serializer = SerializerBuilder::create()->build();
$result = $serializer->deserialize($events, 'AppBundle\Document\Event', 'json');
var_dump($result);
exit;
}
Dies funktioniert nicht, da einige der Elemente, die an den Serializer übergeben werden, ein Array-Format haben. Fehler, den ich bekomme.
Warning: json_decode() expects parameter 1 to be string, array given
500 Internal Server Error - ContextErrorException
aber wenn ich den eingebauten Symfony Serializer verwenden, es funktioniert:
$serializer = $this->container->get('serializer');
$reports = $serializer->serialize($events, 'json');
return new Response($reports);
jedoch die JSON erzeugt wird daher zu meinem Dokument/Entity unterschiedlich sein, warum ich wollen/müssen die JMSSerializerBundle verwenden .
Zum Beispiel sieht ein Datensatz wie folgt aus:
[{
"id": "572041b3288b560e5e00451c",
"name": "Test",
"date": "2016-04-27T05:25:00+1000",
"enddate": "2016-04-30T11:55:00+1000",
"location": {
"name": "Sydney, NSW"
},
"key": {
"id": "1g43g34g34g23f32g32G32gGSDF"
},
"user": {
"id": "57203174288b560e5e0044da"
}, ...
}]
Aber ich will nur (Ausgang) angezeigt zu JSON
[{
"id": "572041b3288b560e5e00451c",
"name": "Test",
"date": "2016-04-27T05:25:00+1000",
"location": "Sydney, NSW"
}]
Wie würde ich über das tun dies gehen? Es gibt nicht viel Dokumentation zu JMSSerializerBundle online.
Edit: Ich sollte erwähnen, dass die Datenbank-Sammlung, die ich abfrage, hat eine Beziehung zu der Benutzer-Sammlung, die von FOSUserBundle verwaltet wird. Ich bin mir nicht sicher, ob dies irgendeine Beziehung zu meinem Problem hat jedoch
Danke für Ihre Antwort. Ich habe den falschen Serialisierer benutzt, du hast Recht. Ich habe von '$ result = $ serializer-> deserialize ($ events, 'AppBundle \ Document \ Event', 'json');' in '$ result = $ serializer-> serialize ($ events, 'json');' wie in der Dokumentation: http://jmyst.com/bundles/JMSSerializerBundle#usage Wo ich stecke ist das Ergebnis gefiltert, so dass nur ausgewählte Felder angezeigt werden. Ich konnte in der Dokumentation keine Notiz darüber finden und fragte mich, ob es möglich war. Danke – Brendan
Ich denke, Sie sollten sich das Ausschlusssystem ansehen: http://jmsst.com/libs/serializer/master/cookbook/exclusion_strategies – olibiaz