MVC模式(在模型中需要视图对象)


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所说,控制器应该是唯一与视图通信的东西。然后只将必要的信息传递给模型。

对于模型来说,它实际上应该只处理它理解的信息。

。如果你有一个汽车模型…你不想依赖于它的工厂来构建它。如果你这样做了,如果你想在不同的工厂构建它,你就必须修改你的代码。

控制器是你"烘烤"一切准备渲染的地方。通过bake,我的意思是考虑任何传入$_REQUEST参数,进行模型API调用以获取所需的数据,并设置要呈现的模板变量。在这个过程结束时,你的动作应该调用你选择的模板(视图),以呈现"烘焙"的模板变量。