【问题标题】:CodeIgniter $this->load->vars()CodeIgniter $this->load->vars()
【发布时间】:2011-08-11 20:12:25
【问题描述】:

我想知道$this->load->vars() 在 CodeIgniter 中是如何工作的。文档对此相当模糊。

我有以下代码:

    $init = $this->init->set();

    $this->load->view('include/header', $init);
    $this->load->view('include/nav');

    $dates = $this->planner_model->create_date_list();
    $this->load->view('planner/dates_content', $dates);

    $detail = $this->planner_model->create_detail_list();
    $this->load->view('planner/detail_content', $detail);


    $this->load->view('include/footer');

但是,我的detail_content 视图中还需要$datesarray。我试图用$this->load->vars() 加载它,并希望它会附加到$detail 数组中,因为CI 文档说明如下:

您可以多次调用此函数。数据被缓存并合并到一个数组中以转换为变量。

如果我这样做 $detail['dates'] = $dates; 会起作用吗?那么它会将$dates 数组附加到$detail['dates'] 吗?

提前致谢。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    $this->load->vars() 非常适合此目的。试试这个:

    $init = $this->init->set();// Won't be passed to the next 2 views
    $this->load->view('include/header', $init);
    $this->load->view('include/nav');
    
    $dates = $this->planner_model->create_date_list();
    $this->load->vars($dates);
    $this->load->view('planner/dates_content');
    
    $detail = $this->planner_model->create_detail_list();
    $this->load->vars($detail);
    $this->load->view('planner/detail_content');
    

    对我来说奇怪的是,通常您将关联数组作为数据传递,例如 $data['my_var_name'] = $var_value,因此我假设您的模型调用返回的数据已经使用您将使用的变量名称(数组键)结构化你的观点我觉得很奇怪,但我对你的申请一无所知。

    这是一个更“传统”的版本:

    $data['dates'] = $this->planner_model->create_date_list();
    $this->load->view('planner/dates_content', $data);
    
    $data['detail'] = $this->planner_model->create_detail_list();
    // receives both dates and detail
    $this->load->view('planner/detail_content', $data);
    

    【讨论】:

    • 但是,使用您的代码,我可以访问 detail_content 视图中的 $dates 数组吗?感谢您的快速回复。
    • 是的,您将可以访问这些变量。
    • 我的数据从我的模型返回时确实已经结构化。请问为什么会这样奇怪?它本身是“坏的”吗?谢谢。
    • 我觉得这很奇怪,因为模型不应该直接与视图对话。 Model 调用的返回值应该尽可能“原始”以使其可重用,而不是返回任意键/值对以在视图中使用......就像我说的那样,我不知道它对你的意义有多大在这种情况下,这可能是个好主意,但肯定是非常规的。
    • 如果你有时间看看,这就是我的数组的样子:stackoverflow.com/questions/5764998/… 不确定这是否有帮助。
    【解决方案2】:

    您是否尝试过只构建一个传递给不同视图的数组?我发现$this->load->vars() 行为异常。

    【讨论】:

    • 当您发布此内容时,我只是在更新我的帖子。 :)
    • Y构建一个类似$viewdata['dates']的数组。然后使用$this->load->view('header', $viewdata) 加载您的视图。然后你可以在你的视图中使用echo $dates。您可以将相同的数组传递给每个视图。
    【解决方案3】:

    正如其他答案和用户指南中所述,使用$this->load->vars() 与在$this->load->view() 中包含第二个参数相同。

    但是来自用户指南:

    您可能希望独立使用此函数的原因是,如果您想在控制器的构造函数中设置一些全局变量,并让它们在从任何函数加载的任何视图文件中可用。

    这对我来说是您使用$this->load->vars() 的唯一原因。正如@madmartigan 所说,将视图加载器与第二个参数一起使用会更方便。

    【讨论】:

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