我目前正在开发一个实现前端控制器模式的MVC应用程序。
过程如下:
- 请求已收到
- 请求被转换为RequestObject
- RequestObject被传递给dispatcher
- Dispatcher然后路由并调用所需的控制器。
- 控制器在ResponseObject中返回结果。
- Dispatcher然后返回ResponseObject到应用的"Front"。
- 然后回显输出
有一个特殊情况(对于ajax和flash前端):
- 调度程序将看到请求被发送到"端点"控制器。
- 端点控制器然后像上面那样将请求分派给实际被请求的控制器。
- 然后将requestObject返回给端点控制器。
- 端点控制器然后做它的JSON或AMF编码,这是回显。
- 脚本终止于
exit()
;
我已经创建了一个ExceptionHandler
类并将其注册到set_exception_handler
。同时,我创建了ErrorHandler
并使用set_error_handler
,然后将所有错误转换为异常并抛出。
所有这些都运行良好。然而,当ExceptionHandler
捕获这些例外之一时,我正在努力解决这个问题。在ExceptionHandler
中,ResponseObject被修改以反映我们需要抛出一个500错误的事实。
我想以某种方式从ExceptionHandler
返回ResponseObject,因此返回的ResponseObject可以由调度程序"捕获",然后由"端点"控制器或"前端"控制器呈现或转换为JSON或AMF响应。
这可能吗?如果有,最好的方法是什么?
这不可能。如http://php.net/set_exception_handler
所述调用exception_handler后,执行将停止。
正确的方法是将try-catch
块添加到调度程序中,到调用控制器调度方法的地方。