使用set_exception_handler处理应用程序中的错误


Using set_exception_handler to handle errors in an application

我目前正在开发一个实现前端控制器模式的MVC应用程序。

过程如下:

  1. 请求已收到
  2. 请求被转换为RequestObject
  3. RequestObject被传递给dispatcher
  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错误的事实。

我想以某种方式从ExceptionHandler返回ResponseObject,因此返回的ResponseObject可以由调度程序"捕获",然后由"端点"控制器或"前端"控制器呈现或转换为JSON或AMF响应。

这可能吗?如果有,最好的方法是什么?

这不可能。如http://php.net/set_exception_handler

所述

调用exception_handler后,执行将停止。

正确的方法是将try-catch块添加到调度程序中,到调用控制器调度方法的地方。