我正在尝试开发用于学习目的的个人MVC框架。但是每次我陷入这个问题:错误。
我觉得我对他们很不好。当前,我有一个异常系统(一切都转换为异常,甚至PHP触发了错误),该异常系统被捕获在try {}块中,该块包含框架和用户应用程序的每一行代码。
我正在像对待其他错误一样处理“找不到 Controller ”或“找不到 Action ”之类的错误,例如“无法连接到数据库”。但是我觉得后者在某种程度上更是一种“异常(exception)”,而不是一个非常普通的“找不到 Controller (404)”。
另外,当前我正在使用错误处理,该错误处理几乎复制了MVC在我的框架中的工作方式,即当发生错误时,我会针对每种类型的错误加载特定的操作并加载特定的 View 文件。我没有使用我的框架的MVC(通过MVC,我的意思是加载 Controller ,运行操作,加载模型和用户应用程序 View 的所有机制),因为MVC中的错误可能导致触发错误,它将尝试使用MVC对其进行管理,这将再次触发相同的错误,然后再次加载MVC,以此类推,从而无限循环。
我应该如何处理框架的每个错误?现在的最佳做法是什么?
最佳答案
Controller 恕我直言的执行可以生成两个异常:
找不到
为了解决这个问题,我只需要遵循以下代码。而且您可以使用多个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/