我在理解codeigniters加载的工作原理时遇到了一些麻烦。
首先,你有自动加载,看起来非常简单,它每次加载一切。所以这对于我一直使用的东西来说听起来不错。
其次,您可以内联加载所有内容。但这是我的问题:它能保持多长时间?
假设我在控制器中加载表单验证库,然后加载模型,我可以在模型中使用表单验证还是我必须重新加载它? 继续说我加载一个视图和另一个控制器,我可以使用表单验证吗?或者我需要加载? 重定向后? 如果我加载模型或帮助程序而不是库,怎么样? 假设我想在另一个模型中使用模型,我在哪里加载那个模型?
所以基本的问题是,在我需要重新加载之前,负载需要多长时间或多长时间?
答案 0 :(得分:5)
正如@yi_H正确指出的那样,加载持续所有当前脚本的生命周期。 I.E.当您调用控制器的方法时,将加载资源。如果你在另一个方法中调用相同的资源,那就不再可用了。
这是因为控制器在每个请求时都被初始化,因此当您访问时
index.php/mycontroller/method1
控制器已初始化(您可以启用日志并清楚地看到它)。在您的方法中,您加载,例如,html帮助器。
如果您随后访问index.php/mycontroller/method2,
并且它还需要html帮助程序,但是您没有加载它介绍方法,则会收到函数错误。
所以,基本上,如果你想拥有相同的资源,你有3个选择:
它或多或少与自动加载相同,只是它只能用于你把构造函数放入的控制器,所以当你不想在EACH控制器上加载某些东西时你会得到一个好处(比如当你使用自动加载)但仅限于少数。 为了使用这最后一种方法,请记住在控制器内部调用父母构造函数(就像通常使用模型一样):
function __construct()
{
parent::__construct();
$this->load->library('whateveryouwant');
}
答案 1 :(得分:0)
它一直呆到那里(直到你的脚本完成并且宇宙崩溃)
答案 2 :(得分:-1)
在编写自己的模型或帮助程序时加载某些内容,例如:
$ci = get_instance();
$ci->load->library('user_agent');
$ci->load->database();
关于所有其他问题,我认为您应该加载每个Controller所需的内容。