模型或控制器中的错误处理?

时间:2010-07-12 05:14:27

标签: php model-view-controller error-handling

我询问了各种IRC频道,但无法得到答案,背后有明确的解释。是应该在模型中还是在控制器中处理错误(与模型有关,例如交易失败)?

提前感谢您的帮助。

修改

嗯,令人困惑的是我的代码(在模型中)看起来像这样:

try
{
    // Connect to MongoDB
    // Fetch a record
}
catch (MongoConnectionException $e)
{
    // Handle this error
}
catch (MongoException $e)
{
    // Handle this error
}

那么,我应该根据MongoDB返回的异常返回异常吗?或者我应该直接允许这些例外冒泡到控制器吗?

谢谢!

5 个答案:

答案 0 :(得分:4)

正确的答案是“两者”,但主要是在模型中。

控制器要做的恰当之处就是捕获模型抛出的一些异常,并处理输出一个漂亮的“whups”消息。根据您构建模型的方式,控制器可能需要进行一些记录。

除了捕获异常之外的任何内容,可能写入日志(如果您的模型基础结构没有这样做),并且显示漂亮的错误,不属于您的控制器。

答案 1 :(得分:2)

诸如事务失败之类的错误 - 以及在这种情况下该怎么做 - 是业务逻辑问题。因此,应在模型中处理它们,并将适当的通知传递回控制器。

肥胖模特,瘦瘦的控制者。

答案 2 :(得分:0)

ASP.NET C#的Scott Guthrie建议使用Controller作为异常处理程序。他还建议为项目设置辅助对象和处理程序。这反过来允许您继续正常开发。

请注意,但是对于PHP MVC仍处于最早阶段和实现阶段,这可能并不完美。

我确实认为,一旦你决定如何处理仍然使用它的解决方案,并在做出决定后遵循该模式。

答案 3 :(得分:0)

MVC框架背后的想法非常简单且非常灵活。这个想法是你有一个控制器(如index.php),它根据请求中的参数控制框架内应用程序的启动。这通常至少包括一个参数,用于定义要调用的模型,事件和通常的GET参数。控制器从那里验证请求(身份验证,有效模型,请求清理等)并运行请求的事件。

目前只有两个真正的框架......这可能是编码,支持和未来版本的问题。虽然,有很多框架可以扩展自己以支持MVC。

在最早的阶段,我的意思是说并且建议当前的框架,解决方案和支持由于紧急交付和糟糕的文档而受到限制。另外,我建议什么对我有用,并且过去对我有用。

我强烈This Website

答案 4 :(得分:0)

在大多数情况下,您应该throw或将exception传递给呼叫者/接收者AKA Controller BLL

处理动作而不是模型是控制器的工作
视图的工作是显示一个非模型的消息框(或其他内容)

不能处理模型中的exception,实际上,您只能记录或抛出它们。