【问题标题】:CodeIgniter $this->load->vars($array)CodeIgniter $this->load->vars($array)
【发布时间】:2011-07-06 06:21:10
【问题描述】:

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

$this->data['username'] = "john";
$this->load->vars($this->data);

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

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

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

谢谢!

【问题讨论】:

  • 我相信load->vars() 只会提取传入的变量。您打算在模型中动态创建变量吗?
  • 是的,没错,它会提取变量。更具体地说,我希望通过在对象上调用 Notify() 来触发通知。例如:$user->Notify('password_change_success')。我想根据传入的键在 Notify() 内部全局设置一条消息……但是,它属于 Datamapper 对象而不是 Controller,因此无法调用 load->vars() 。总之,我想知道是否可以在模型内部设置全局变量。

标签: codeigniter


【解决方案1】:

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

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

这将允许我从我的控制器中抽象出一些细节,使其更干净。

这就像扫地毯下的泥土,它并没有消失——它只是去了其他地方,你以后一定要处理它。

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

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

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

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

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

建议:

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

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多