CodeIgniter $ this-> load-> vars($ array)

时间:2011-07-06 06:21:10

标签: codeigniter

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对象。

谢谢!

1 个答案:

答案 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 位置在模型中。您最终可能会在未来重新审视此项目,因此请尽量保持一致,并坚持建议的预期做法。