Использование set_exception_handler для обработки ошибок в приложении - PullRequest
1 голос
/ 15 декабря 2011

В настоящее время я работаю над приложением MVC, которое реализует шаблон фронт-контроллера.

Процесс работает следующим образом:

  1. запрос получен
  2. запроспревращается в RequestObject
  3. RequestObject передается диспетчеру
  4. Dispatcher, затем маршрутизирует и затем вызывает требуемый контроллер.
  5. Контроллер возвращает результаты в ResponseObject.
  6. Затем Dispatcher возвращает объект ResponseObject в «Front» приложения.
  7. Затем выводится вывод.

Существует особый случай (для интерфейсов ajax и flash).):

  1. Диспетчер увидит, что запрос отправлен контроллеру "конечной точки".
  2. Затем контроллер конечной точки отправляет запрос фактическому запрашиваемому контроллеру, как указано выше.
  3. Затем requestObject возвращается в контроллер конечной точки.
  4. Затем контроллер конечной точки выполняет кодировку JSON или AMF, и это отражается.
  5. Затем скрипт завершается с exit();

Я создал класс ExceptionHandler и зарегистрировал его с set_exception_handler.В то же время я создал ErrorHandler и, используя set_error_handler, все ошибки затем преобразуются и генерируются как исключения.

Все это работает хорошо.Однако я борюсь с проблемой, когда ExceptionHandler ловит одно из этих исключений.В ExceptionHandler объект ResponseObject изменен, чтобы отразить тот факт, что нам нужно выдать ошибку 500.

Я хотел бы каким-то образом вернуть объект ResponseObject из ExceptionHandler, чтобы возвращаемый объект ResponseObject можно было «перехватить»"диспетчером и затем преобразован или преобразован в ответ JSON или AMF контроллером" конечной точки "или" фронтальным "контроллером.

Возможно ли это?Если это так, каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 29 апреля 2013

Это невозможно. Как указано на http://php.net/set_exception_handler

Выполнение будет остановлено после вызова обработчика исключения.

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

...