繁体   English   中英

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

至于模型,它实际上仅应处理其了解的信息。

即,如果您有汽车模型...您不想依赖于工厂来构建它。 如果这样做,如果您想在其他工厂中构建代码,则必须更改代码。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM