php - 管理框架错误

标签 php exception-handling error-handling

我正在尝试开发用于学习目的的个人MVC框架。但是每次我陷入这个问题:错误。

我觉得我对他们很不好。当前,我有一个异常系统(一切都转换为异常,甚至PHP触发了错误),该异常系统被捕获在try {}块中,该块包含框架和用户应用程序的每一行代码。

我正在像对待其他错误一样处理“找不到 Controller ”或“找不到 Action ”之类的错误,例如“无法连接到数据库”。但是我觉得后者在某种程度上更是一种“异常(exception)”,而不是一个非常普通的“找不到 Controller (404)”。

另外,当前我正在使用错误处理,该错误处理几乎复制了MVC在我的框架中的工作方式,即当发生错误时,我会针对每种类型的错误加载特定的操作并加载特定的 View 文件。我没有使用我的框架的MVC(通过MVC,我的意思是加载 Controller ,运行操作,加载模型和用户应用程序 View 的所有机制),因为MVC中的错误可能导致触发错误,它将尝试使用MVC对其进行管理,这将再次触发相同的错误,然后再次加载MVC,以此类推,从而无限循环。

我应该如何处理框架的每个错误?现在的最佳做法是什么?

最佳答案

Controller 恕我直言的执行可以生成两个异常:

找不到

  • :缺少 Controller 或方法时
  • 权限被拒绝:当ACL阻止访问


  • 为了解决这个问题,我只需要遵循以下代码。而且您可以使用多个catch块。
    try
    {
        $controller->$command($request, $response);
    }
    catch(AccessDeniedException $e)
    {
        $controller = new ErrorController;
        $controller->accessDenied($request, $response);
    }
    catch(NotFoundException $e)
    {
        $controller = new ErrorController;
        $controller->notFound($request, $response);
    }
    

    您也可以让AccessDeniedException从“模型层”冒出来,但通常这是一个不好的做法。异常应在抛出该异常的同一抽象级别内进行,或者在发生关键异常(对象本身无法处理时)的情况下,这些异常可能会穿透一个抽象边界。并且异常不应离开Model Layer,而应在图层中创建错误状态,并在当前的View实例中进行处理。

    重点是:代替所有错误的魔术处理程序,您应该在错误发生的地方附近处理错误。

    关于php - 管理框架错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11063804/

    相关文章:

    php - 我如何断言结果是 PHPUnit 中的电子邮件?

    javascript - 模板脚本使其仅对 Shopify 上的管理员可见

    C++ try-catch 异常处理约定

    php - PHP错误处理程序和ErrorException混淆: log stack trace

    javascript - Bluebird 无法拒绝错误的问题。解决就好了。错误使应用程序崩溃

    python - Golang 相当于 Python 的 NotImplementedException

    php - 用 PHP 或 JavaScript 处理的大数组

    php - 卡在 MYSQL mysqli 获取行中

    PHP 链接错误处理

    php symfony 异常处理/错误处理