Ich versuche, einen REST-Webdienst zu erstellen, der JSON für alle Aufrufe zurückgibt. Normalerweise ist dies ziemlich einfach, das tue ich nur so:Wie werden alle Ausnahmen abgefangen, die in der Symfony2-Controlleraktion auftreten können?
return new Response(json_encode($return_object));
Meine Frage ist, wie soll ich Ausnahmen in einer globalen Weise abfangen? Ich möchte dies tun, denn wenn irgendwo in meiner Anwendung eine Ausnahme auftritt, möchte ich immer noch eine JSON-Nachricht an den Client zurücksenden, in der im Grunde gesagt wird: "Yo dawg, ich habe gehört, dass Sie Ausnahmen mögen". Mein Gedanke ist, dass die Rückgabe von JSON sowohl in Erfolgs- als auch in Fehlerfällen die Arbeit vereinfachen wird, die ein Client ausführen muss, um meine API zu implementieren.
Bisher das einzige, was ich denken kann, ist jeder Controller-Aktion wie folgt zu schreiben:
public function generateMemeAction($arg1, $arg2) {
$return_object = array();
try {
// stuff to generate meme here
$return_object['status'] = "GREAT SUCCESS!";
} catch (Exception $e) {
// epic fail
$return_object['status'] = "UnluckyBrianException";
}
return new Response(json_encode($return_object));
}
, die alle groß und wunderbar ist, aber das Try-catch-Block wird das gleiche für jede Aktion sein in meiner App, und ich werde jedes Mal albern fühlen, wenn ich um eine Reihe von Copy Pasta bearbeiten muss. Pro Tipps?
Super! Danke Evgeny, das macht wirklich alles klar. Ein bisschen mehr graben herum und ich fand genau, wie man eine Funktion zu diesem Ereignis anmeldet: http://symfony.com/doc/current/cookbook/service_container/event_listener.html – robertdfrench
Sie können die JSON-Formatierung bedingt auch anwenden, indem Sie die Anfrage untersuchen headers und früh zurück: 'if (! $ event-> getRequest() -> headers-> enthält ('Accept', 'application/json')) return;' – Tamlyn