【问题标题】:Loading View Page In Library In Codeigniter在 Codeigniter 的库中加载视图页面
【发布时间】:2012-01-31 03:52:01
【问题描述】:

在我的 codeigniter 中,我在库文件夹中创建了一个库。我想在该库中加载视图页面。我该怎么做?

这是我的代码:

$this->load->view('view_page');

但是当我使用这个代码时,我得到一个错误:

A PHP Error was encountered

Severity: Notice

Message: Undefined property: CI_theme_lib::$load

Filename: libraries/theme_lib.php

Line Number: 9

我的代码有什么问题?

在库的第 9 行代码是:

$this->load->view('view_page');

【问题讨论】:

  • 你加载你的图书馆了吗?例如,$this->load->library('mylib');
  • 是的,我加载了库
  • 在你的库中显示第 9 行的代码,或者更好,请显示你所有的代码。

标签: php codeigniter classloader codeigniter-2


【解决方案1】:

要执行您想做的事情,您需要获取 CI 实例并使用它。

例如

$CI =& get_instance();

在您的库函数中,您可以然后使用此变量来加载视图:

$CI->load->view('view_page'); 

我会质疑您为什么要在库中以您已完成的形式调用视图。我怀疑你最好让视图调用返回数据(设置第三个参数'true')然后让你的库将显示数据返回给控制器......你的方法看起来很乱,但我没有了解您的图书馆正在尝试做什么.....

【讨论】:

    【解决方案2】:

    出于不同的原因,我遇到了您的问题,我似乎在将变量传递给视图时遇到了问题。在我告诉你问题的答案之前,让我解释一下。

    假设您有一个 Emailer 库来发送电子邮件,而不是在控制器中对其进行分类。 Emailer 比内部使用视图构建电子邮件字符串。我的问题是,当我从像 Emailer::send_mail($data,$template) 这样的控制器进行调用时,它会正确传递变量,但是当我从另一个库中调用时,视图无法注册变量。哈哈

    所以是的,Stéphane Bourzeix 有时确实希望以不同于返回客户端浏览器的方式使用视图输出。

    解决方案就在这里。 https://www.codeigniter.com/userguide2/general/views.html

    该页面的最后一部分类似于

    $string = $this->load->view('myfile', '', true); 
    

    但类似

    $string = $this->load->view('myfile', $view_data, true);
    

    应该也可以

    如果从控制器以外的其他地方执行此操作,您将需要:

    $this->ci = & get_instance();
    $string = $this->ci->load->view("myfile",$view_data,true);
    

    似乎列表中的最后一个参数 (true) 是告诉它不要渲染到浏览器而是只创建带有模板内容的字符串

    我知道这有点太晚了,但希望它仍然对某些人有所帮助。祝你的代码好运。

    汤姆

    【讨论】:

      【解决方案3】:

      您只是不要在库中加载页面(也称为视图)。 我认为没有必要这样做。

      【讨论】:

      • 没错。 OP 应该在控制器中执行此操作。在库中,您应该返回数据,然后将其传递给视图进行展示。
      • 这不是一个答案。你没有理由不能这样做,这与没有看到你个人这样做的任何理由不同。
      • 您不能这样做,因为 CI 对象在 Lib 中不可用,正如您在回答中提到的那样,您需要先实例化它。我认为我说这是一个错误的想法是相当正确的,这就是为什么它一开始就没有用;-)
      • 假设您一直在加载相同的视图,假设您在 6 行代码中执行此操作,因为您正在加载大量视图。为什么你不能把它放在图书馆里?我确实看到了在库中加载视图的意义。
      • 我知道这已经有点老了,但一个潜在的原因可能是创建一个小部件类。您可以简单地将视图作为变量加载(而不是输出)并将其返回给控制器。因此,如果不出意外,请保持您的代码干燥且可重复使用。
      猜你喜欢
      • 2015-05-05
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多