codeigniter的负载如何工作?

时间:2011-07-09 09:42:45

标签: php codeigniter load

我在理解codeigniters加载的工作原理时遇到了一些麻烦。

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

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

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

所以基本的问题是,在我需要重新加载之前,负载需要多长时间或多长时间?

3 个答案:

答案 0 :(得分:5)

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

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

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

  1. 在application / config / autoloader.php
  2. 中自动加载
  3. 在每个请求中加载它,即在将使用该资源的每个方法内
  4. 将它放在控制器的构造函数中,以便在每次请求时始终初始化它。
  5. 它或多或少与自动加载相同,只是它只能用于你把构造函数放入的控制器,所以当你不想在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所需的内容。