[英]MVC pattern (need view object in model)
我在应用程序中使用MVC模式。
现在,我需要模型中的视图对象。
我不想将视图添加为模型中函数的参数(因为在其他函数中也需要它)。 而且我不想继续通过它。
是否应该将视图添加为模型构造函数的属性?
还有另一种方法吗? 首先我不应该在模型中需要视图对象吗?
这样做的首选方式是什么?
例:
控制者
function someAction()
{
$somemodel->add();
}
模型
class SomeModel()
{
function add()
{
if ($view->user) {
// do stuff
$this->mail();
} else {
// do other stuff
}
}
function mail()
{
Mailer::send($view->user->email, $this->getitems(), $view->layout);
}
function getitems()
{
return Items::getitems($view->user);
}
}
如果您确实在做MVC,那么您就不需要模型中的视图,因为只有控制器才有权访问该视图。
查看您提供的代码,我可以说一件事: add()
方法不应以任何方式引用$view
(即使用于访问其属性)。 相反,应该为模型提供来自控制器的$view->user
值。 mail()
方法也是如此。
考虑解决这些问题。 否则,以后您会遇到更糟的情况。
模型应与视图分开。 因此,正如mkArtak所说,控制器应该是唯一与视图通信的对象。 然后,仅将必要的信息传递给模型。
至于模型,它实际上仅应处理其了解的信息。
即,如果您有汽车模型...您不想依赖于工厂来构建它。 如果这样做,如果您想在其他工厂中构建代码,则必须更改代码。
控制器是您“烘焙”所有准备渲染的地方。 烘焙是指您考虑传入$ _REQUEST参数中的任何参数,进行模型API调用以获取所需的数据,并设置要呈现的模板变量。 在此过程结束时,您的操作应调用您选择的模板(视图),以呈现“烘焙的”模板变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.