すべての呼び出しでJSONを返すREST Webサービスを構築しようとしています。通常、これは非常に簡単です、私はちょうどこのようにします:Symfony2コントローラのアクションで発生する可能性があるすべての例外をキャッチする方法は?
return new Response(json_encode($return_object));
私の質問は、私はグローバルな方法で例外をインターセプトする方法、ありますか?私はこれをやりたがっています。なぜなら、アプリケーション内で例外が発生した場合でも、JSONメッセージをクライアントに返すことが基本的には「基本的には例外です。 JSONを成功と失敗の両方で返すと、クライアントが自分のAPIを実装するために必要な作業が簡単になります。
これまでのところ、私は考えることができる唯一のことは、このようなすべてのコントローラのアクションを作成することです:
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));
}
すべての偉大な、素晴らしいですが、それのtry-catchをブロックは、すべてのアクションのために同じになります私のアプリでは、私はコピーパスタの束の周りに編集する必要があるたびに愚かな気がします。プロのヒント?
恐ろしい!本当に物事をクリアするEvgenyありがとう。もう少し掘り下げて、そのイベントに関数をサブスクライブする方法を見つけました:http://symfony.com/doc/current/cookbook/service_container/event_listener.html – robertdfrench
JSONフォーマットを条件付きで適用するには、リクエストを調べてヘッダーと初期の戻り値: 'if(!$ event-> getRequest() - > headers-> contains( 'Accept'、 'application/json'))return; – Tamlyn