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

Jor*_*eno 5 codeigniter

CodeIgniter 有一个方法$this->load->vars($array),非常适合在父 Controller 中使用,以直接在视图中提供对系统变量的全局访问。例如:

$this->data['username'] = "john";
$this->load->vars($this->data);
Run Code Online (Sandbox Code Playgroud)

然后在视图中,您可以通过 echo 轻松访问 john $username

我的问题是,是否可以$this->load->vars($array)在 Model 而不是 Controller 中使用?这将允许我从我的控制器中抽象出一些细节,使其更清晰。我必须进行哪些更改才能使其正常工作?你会推荐它吗?你认为它破坏了MVC吗?

另外,我使用的是 Datamapper ORM,所以我的模型实际上扩展了 Datamapper 对象而不是 Model 对象。

谢谢!

Wes*_*rch 3

是否可以在模型中而不是控制器中使用 $this->load->vars($array) ?

如前所述,是的,您可以执行此操作,您甚至可以从模型加载视图,甚至可以$this->load->vars()在视图中运行并加载另一个视图。

这将使我能够从控制器中抽象出一些细节,使其更清晰。

这就像扫地毯下的污垢一样,它并没有消失——它只是去了其他地方,你稍后必须处理它。

你会推荐它吗?你认为它破坏了 MVC 吗?

它不会“破坏”任何东西,但它意味着您的 MVC 概念可能有些被破坏了。如果它与数据层无关而与视图层有关,那么它就不属于模型。很可能还有其他一些不完全属于那里的东西......

我正在使用 Datamapper ORM,因此我的模型实际上扩展了 Datamapper 对象而不是 Model 对象。

您可能需要调用get_instance()它并将其分配给变量或类属性以在 DM 模型中使用,以便您可以访问 Codeigniter 对象。

例子:$CI =& get_instance(); $CI->load->vars();

建议:

以最简单、最可重用的形式从模型返回数据,然后将其分配给控制器中的视图变量。如果我要在视图文件中查找某些变量的来源,那么我最后要查找的位置是模型中。您将来可能会重新访问该项目,因此请尽可能保持一致,并坚持建议的预期实践。