В настоящее время я работаю над приложением MVC, которое реализует шаблон переднего контроллера.
Процесс работает так:
- запрос получен
- запрос превращается в RequestObject
- RequestObject передается диспетчеру
- Диспетчер затем маршрутизирует, а затем вызывает требуемый контроллер.
- Контроллер возвращает результаты в ResponseObject.
- Затем Dispatcher возвращает ResponseObject на «передний план» приложения.
- Затем вывод воспроизводится эхом.
Есть особый случай (для ajax и flash интерфейсов):
- Диспетчер увидит, что запрос отправлен на «конечный» контроллер.
- Затем контроллер конечной точки отправляет запрос фактически запрошенному контроллеру, как указано выше.
- Затем объект requestObject возвращается контроллеру конечной точки.
- Затем контроллер конечной точки выполняет кодировку JSON или AMF, и это отображается.
- Затем сценарий завершается
exit()
;
Я создал класс ExceptionHandler
и зарегистрировал его в set_exception_handler
. В то же время я создал ErrorHandler
и с помощью set_error_handler
все ошибки затем преобразуются и выдаются как исключения.
Все это хорошо работает. Однако я борюсь с проблемой, когда ExceptionHandler
перехватывает одно из этих исключений. В ExceptionHandler
ResponseObject изменен, чтобы отразить тот факт, что нам нужно выдать ошибку 500.
Я хотел бы каким-то образом вернуть ResponseObject из ExceptionHandler
, чтобы возвращенный ResponseObject мог быть «пойман» диспетчером, а затем отрендерен или преобразован в ответ JSON или AMF контроллером «конечной точки» или «передним» контроллером .
Это возможно? Если да, то как лучше всего это сделать?
1 ответ
Это невозможно. Как указано на http://php.net/set_exception_handler.
Выполнение будет остановлено после вызова exception_handler.
Правильный способ — добавить блок try-catch
в диспетчер, в то место, где вызывается метод диспетчеризации контроллера.
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.