我正在尝试了解CodeIgniter中视图文件的$this->load->view()
如何在中工作。
core / Controller.php调用core / Loader.php然后调用_ci_load(),然后调用include('/path/to/view');
那时$this
不应该引用Loader类吗? $this
如何引用控制器?
根据我的理解,你应该在视图文件中调用$ this-> view()。不是$ this-> load-> view()因为在Loader中无法访问load()函数。它是Controller基类的类变量。即,$this->load =& load_class('Loader');
请注意:我正在尝试了解CodeIgniter内部。我非常清楚如何将视图文件作为CodeIgniter 用户嵌入到其他视图文件中。请不要留下解释如何使用 $ this-> load()的答案。
答案 0 :(得分:4)
为了简化对$this
在视图中引用的内容的理解,由于视图是由控制器方法“加载”的,因此视图仍然在与该方法相同的范围内运行,这意味着{{1}根据加载它的类,可以有不同的上下文。
例如:
$this
在此示例控制器中加载的任何视图文件中,class Controller1 extends CI_Controller {}
专门指$this
类,它也可以访问Controller1
公共和受保护的属性/方法(如Loader或输入类,分配给CI_Controller的CI_Controller
和load
属性,因为它扩展该类。
控制器仍然只是普通的旧PHP类。如果我这样做:
input
...如果我们在其中任何一个控制器的任何方法中加载相同的视图文件,则在该视图文件中使用class Controller1 extends CI_Controller {
$this->foobar = 'Hello';
}
class Controller2 extends CI_Controller {
$this->foobar = 'World';
}
将返回不同的值。
答案 1 :(得分:3)
我上次检查时,$this
属于CI_Loader
课程,请在视图中尝试var_dump($this);
。
退房:
https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Controller.php
is_loaded();
返回一个数组,其中包含已加载的类名及其主容器中的别名。
$this->load
是控制器内CI_Loader
的实例。
检查:
https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Loader.php
第778行