使用set_exception_handler处理应用程序中的错误
问题描述:
我目前正在研究实现前端控制器模式的MVC应用程序。使用set_exception_handler处理应用程序中的错误
的过程是这样的:当接收
- 要求
- 请求被变成了RequestObject
- RequestObject传递给调度员
- 调度随后的路线,然后调用所需的控制器。
- 控制器将结果返回给ResponseObject。
- 然后分派器将ResponseObject返回给应用程序的“Front”。
- 输出被回显出来。
有一个特殊的情况下(AJAX和闪光前端):
- 调度器将看到该请求被发送到“端点”控制器。
- 端点控制器然后如上所述将请求分派给实际请求的控制器。
- 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
块添加到调度员,到那个地方控制器调度方法被调用。