Как перехватить все исключения, которые могут возникнуть в действии контроллера Symfony2?

Я пытаюсь создать веб-службу REST, которая возвращает JSON для всех вызовов. Обычно это довольно просто, мне просто нравится:

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));
}

Все это здорово и замечательно, но этот блок catch try -будет одинаковым для каждого действия в моем приложении, и я буду чувствовать себя глупо каждый раз, когда мне придется редактировать кучу пасты для копирования. Про советы?

18
задан robertdfrench 6 July 2012 в 21:24
поделиться