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

时间:2011-12-15 05:02:35

标签: php model-view-controller exception-handling front-controller

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

这个过程是这样的:

  1. 收到请求
  2. 请求变为RequestObject
  3. 将RequestObject传递给调度程序
  4. Dispatcher然后路由然后调用所需的控制器。
  5. Controller在ResponseObject中返回结果。
  6. Dispatcher然后将ResponseObject返回到应用程序的“Front”。
  7. 然后输出结果。
  8. 有一种特殊情况(对于ajax和flash前端):

    1. 调度员将看到请求被发送到“端点”控制器。
    2. 然后,端点控制器将请求分派给实际请求的控制器,如上所述。
    3. 然后将requestObject返回到端点控制器。
    4. 然后,端点控制器执行JSON或AMF编码,这是回应。
    5. 然后脚本以exit();
    6. 终止

      我创建了一个ExceptionHandler类,并将其注册到set_exception_handler。在我创建ErrorHandler并使用set_error_handler的同时,所有错误都会被转换并作为异常抛出。

      所有这些都很有效。然而,当ExceptionHandler捕获其中一个异常时,我正在努力解决这个问题。在ExceptionHandler中,修改了ResponseObject以反映我们需要抛出500错误的事实。

      我想以某种方式从ExceptionHandler返回ResponseObject,这样返回的ResponseObject可以被调度程序“捕获”,然后由“端点”控制器或“或”转换为JSON或AMF响应。前面的“控制器。

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

1 个答案:

答案 0 :(得分:0)

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

所述
  

执行将在调用exception_handler之后停止。

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