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

时间:2011-11-04 00:04:15

标签: php model-view-controller

我在我的应用程序中使用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);
    }
}

3 个答案:

答案 0 :(得分:5)

如果您真的在做MVC,那么您将不需要模型中的视图,因为只有控制器才能访问视图。

查看您提供的代码,我可以说一件事:add()方法不应以任何方式引用$view(即使访问其属性)。相反,应该为模型提供来自控制器的$view->user值。 mail()方法也是如此。

考虑解决这些问题。否则,你以后会遇到更糟糕的事情。

答案 1 :(得分:1)

模型应与视图分开。因此,正如mkArtak所说,控制器应该是唯一与视图通信的东西。然后,它只将必要的信息传递给模型。

至于模型,它应该只处理它理解的信息。

即。如果你有一个汽车模型......你不想依赖它的工厂来建造它。如果您这样做了,如果您想在不同的工厂中构建代码,则必须更改代码。

答案 2 :(得分:1)

控制器是你“烘焙”所有准备渲染的地方。通过bake我的意思是你考虑传入$ _REQUEST参数,进行模型API调用以获取所需的数据,并设置要呈现的模板变量。在此过程结束时,您的操作应调用您选择的模板(视图),以便呈现“烘焙”模板变量。