【问题标题】:Using set_exception_handler to handle errors in an application使用 set_exception_handler 处理应用程序中的错误
【发布时间】:2011-12-15 05:02:34
【问题描述】:

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

流程如下:

  1. 请求已收到
  2. request 变成了 RequestObject
  3. RequestObject 被传递给调度程序
  4. 调度程序然后路由,然后调用所需的控制器。
  5. 控制器在 ResponseObject 中返回结果。
  6. Dispatcher 然后将 ResponseObject 返回到应用程序的“前端”。
  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 响应控制器。

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

【问题讨论】:

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


    【解决方案1】:

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

    所述

    调用 exception_handler 后将停止执行。

    正确的做法是将try-catch块添加到dispatcher,到调用控制器dispatch方法的地方。

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 2016-03-06
      • 2020-03-07
      • 1970-01-01
      相关资源
      最近更新 更多