CodeIgniter有一个方法$this->load->vars($array)
,理想情况下在父Controller中使用,以直接在视图中提供对系统变量的全局访问。例如:
$this->data['username'] = "john";
$this->load->vars($this->data);
然后在视图中,您可以通过回显$username
轻松访问john。
我的问题是,是否可以在模型中使用$this->load->vars($array)
而不是控制器?这将允许我从Controller中抽象出一些细节,使其更清晰。为了让这个工作有什么变化我需要做些什么?你会推荐它吗?你觉得它打破了MVC吗?
另外,我正在使用Datamapper ORM,因此我的模型实际上扩展了Datamapper对象而不是Model对象。
谢谢!
答案 0 :(得分:2)
是否可以在模型而不是控制器中使用$ this-> load-> vars($ array)?
如上所述,是的,可以执行此操作,您甚至可以从模型中加载视图,甚至可以在视图中运行$this->load->vars()
并加载另一个视图。
这将允许我从我的控制器中抽象出一些细节,使其更清晰。
这就像把地毯上的灰尘扫过一样,它没有消失 - 它只是去了你以后必须处理它的其他地方。
你会推荐它吗?你觉得它打破了MVC吗?
它不会“破坏”任何东西,但它暗示着你的MVC概念可能有些破碎。如果它与数据层无关,而且与视图层有关,则它不属于模型。很可能还有一些其他东西也不属于那里......
我正在使用Datamapper ORM,因此我的模型实际上扩展了Datamapper对象而不是Model对象。
您可能需要调用get_instance()
并将其分配给变量或类属性以便在DM模型中使用,这样您就可以访问Codeigniter对象。
示例:$CI =& get_instance(); $CI->load->vars();
<强>建议:强>
以尽可能最简单,最可重用的形式从模型中返回数据,然后将其分配给Controller中的视图变量。如果我要查看视图文件中某些变量的来源,那么我想要的 last 位置在模型中。您最终可能会在未来重新审视此项目,因此请尽量保持一致,并坚持建议的预期做法。