在我的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
mycode有什么问题?
在库中第9行,代码为:
$this->load->view('view_page');
答案 0 :(得分:5)
要做你想做的事情,你需要获得一个CI的实例,并使用它。
e.g。
$CI =& get_instance();
在库函数中,可以然后使用此变量加载视图:
$CI->load->view('view_page');
我会问你为什么要在库中以你已经完成的形式调用一个视图。我怀疑你最好让视图调用返回数据(设置第三个参数'true'),然后让你的库将显示数据返回给控制器....你的方法似乎很乱,但后来我没有想法你的图书馆正在努力做什么......
答案 1 :(得分:2)
我出于不同的原因遇到了你的问题,我似乎有问题将变量传递给视图。在我告诉你答案之前让我解释一下。
想象一下,您有一个Emailer库来发送电子邮件,而不是在控制器中对其进行排序。 电子邮件发送器本身使用视图构建电子邮件字符串。我的问题是,当我从控制器调用Emailer :: send_mail($ data,$ template)时,它会正确传递变量,但是当我从另一个库中执行此操作时,视图无法注册变量。 LOL
所以是的,StéphaneBourzeix你有时想要以不同于返回客户端浏览器的方式使用视图中的输出。
解决方案就在这里。 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)是告诉它不要渲染到浏览器而是只创建带有模板内容的字符串
我知道这有点太晚了,但希望它对某些人有帮助。祝你的代码好运。
tomhre
答案 2 :(得分:0)
您只是不要在库中加载页面(也就是视图)。 我认为没有必要这样做。