我询问了各种IRC频道,但无法得到答案,背后有明确的解释。是应该在模型中还是在控制器中处理错误(与模型有关,例如交易失败)?
提前感谢您的帮助。
修改
嗯,令人困惑的是我的代码(在模型中)看起来像这样:
try
{
// Connect to MongoDB
// Fetch a record
}
catch (MongoConnectionException $e)
{
// Handle this error
}
catch (MongoException $e)
{
// Handle this error
}
那么,我应该根据MongoDB返回的异常返回异常吗?或者我应该直接允许这些例外冒泡到控制器吗?
谢谢!
答案 0 :(得分:4)
正确的答案是“两者”,但主要是在模型中。
控制器要做的恰当之处就是捕获模型抛出的一些异常,并处理输出一个漂亮的“whups”消息。根据您构建模型的方式,控制器可能需要进行一些记录。
除了捕获异常之外的任何内容,可能写入日志(如果您的模型基础结构没有这样做),并且显示漂亮的错误,不属于您的控制器。
答案 1 :(得分:2)
诸如事务失败之类的错误 - 以及在这种情况下该怎么做 - 是业务逻辑问题。因此,应在模型中处理它们,并将适当的通知传递回控制器。
肥胖模特,瘦瘦的控制者。
答案 2 :(得分:0)
请注意,但是对于PHP MVC仍处于最早阶段和实现阶段,这可能并不完美。
我确实认为,一旦你决定如何处理仍然使用它的解决方案,并在做出决定后遵循该模式。
答案 3 :(得分:0)
MVC框架背后的想法非常简单且非常灵活。这个想法是你有一个控制器(如index.php),它根据请求中的参数控制框架内应用程序的启动。这通常至少包括一个参数,用于定义要调用的模型,事件和通常的GET参数。控制器从那里验证请求(身份验证,有效模型,请求清理等)并运行请求的事件。
目前只有两个真正的框架......这可能是编码,支持和未来版本的问题。虽然,有很多框架可以扩展自己以支持MVC。
在最早的阶段,我的意思是说并且建议当前的框架,解决方案和支持由于紧急交付和糟糕的文档而受到限制。另外,我建议什么对我有用,并且过去对我有用。
我强烈This Website
答案 4 :(得分:0)
在大多数情况下,您应该throw
或将exception
传递给呼叫者/接收者AKA Controller 或 BLL 。
处理动作而不是模型是控制器的工作
视图的工作是显示一个非模型的消息框(或其他内容)
您不能处理模型中的exception
,实际上,您只能记录或抛出它们。