codeigniter的负载如何工作?

Vej*_*jto 7 php load codeigniter

我在理解codeigniters加载如何工作方面遇到了一些麻烦.

首先,你有自动加载,看起来非常简单,它每次加载一切.所以这对于我一直使用的东西来说听起来不错.

其次,你可以加载所有内联.但这是我的问题:它能保持多长时间?

假设我在控制器中加载表单验证库,然后加载模型,我可以在模型中使用表单验证还是我必须重新加载它?继续说我加载一个视图和另一个控制器,我可以使用表单验证吗?或者我需要加载?重定向后?如果我加载模型或帮助程序而不是库,怎么样?假设我想在另一个模型中使用模型,在哪里加载那个模型?

那么基本问题是,在我需要重新加载之前,负载需要多长时间?

Dam*_*rsy 5

正如@yi_H正确指出的那样,加载持续所有当前脚本的生命周期.IE当你调用控制器的方法时,资源被加载.如果在另一个方法中调用相同的资源,则该方法不再可用.

这是因为控制器在每个请求时都被初始化,因此当您访问 index.php/mycontroller/method1 控制器时会初始化(您可以启用日志并清楚地看到它).在您的方法中,您加载,例如,html帮助器.如果您随后访问index.php/mycontroller/method2,并且它还需要html帮助程序,但是您没有加载它介绍该方法,您将收到函数未找到的错误.

所以,基本上,如果你想拥有相同的资源,你有3个选择:

  1. 在application/config/autoloader.php中自动加载它
  2. 在每个请求中加载它,即在将使用该资源的每个方法内
  3. 将它放在控制器的构造函数中,以便始终在每个请求中初始化它.

它与自动加载大致相同,只是它只能用于你把构造函数放入的控制器,所以当你不想在EACH控制器上加载某些内容时(例如当你使用自动加载时)你会得到一个好处但只有少数人.为了使用最后一种方法,请记住在控制器内部调用父母构造函数(就像通常使用模型一样):

function __construct()
{
  parent::__construct();
  $this->load->library('whateveryouwant');
}
Run Code Online (Sandbox Code Playgroud)