【问题标题】:How does codeigniter's load work?codeigniter 的负载是如何工作的?
【发布时间】:2011-07-09 09:42:44
【问题描述】:

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

首先你有自动加载,它看起来很简单,它每次都会加载所有内容。所以这听起来很适合我一直使用的东西。

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

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

那么基本的问题是,在我需要重新加载之前,加载需要多长时间或更确切地说是多远?

【问题讨论】:

    标签: php codeigniter load


    【解决方案1】:

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

    这是因为控制器在每次请求时都会初始化,所以当您访问 index.php/mycontroller/method1 控制器已初始化(您可以启用日志并清楚地看到这一点)。在您的方法中,您加载了 html 帮助程序。 如果你然后访问index.php/mycontroller/method2,,它也需要html帮助,但是你没有在方法中加载它,你会得到一个找不到函数的错误。

    因此,基本上,如果您想始终使用相同的资源,您有 3 个选择:

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

    它或多或少与自动加载相同,只是它只能对您放入构造函数的控制器起作用,因此当您不希望在每个控制器上加载某些东西时(例如当您使用自动加载)但仅限于少数。 为了使用最后一种方法,请记住在控制器中调用父构造函数(就像您通常对模型所做的那样):

    function __construct()
    {
      parent::__construct();
      $this->load->library('whateveryouwant');
    }
    

    【讨论】:

      【解决方案2】:

      它会一直呆在那里直到时间结束(也就是说,当你的脚本完成并且宇宙崩溃时)

      【讨论】:

      • 好吧,如果是这样,我为什么不自动加载我知道我将使用的所有内容?因为如果自动加载一直重新加载所有内容,那将没有意义。还是我错过了理解脚本结尾的含义?当用户离开我的网站或页面完成加载时脚本是否结束?
      • 页面生成完成。对不起深奥的答案:)
      • Vejto:对于每个下一个请求,脚本将开始和结束。
      • 现在我明白了:D 谢谢大家!
      【解决方案3】:

      在编写自己的模型或助手时加载一些东西,例如:

      $ci = get_instance();
      $ci->load->library('user_agent');
      $ci->load->database();
      

      关于所有其他问题,我认为您应该为每个控制器加载所需的内容。

      【讨论】:

        猜你喜欢
        • 2012-12-06
        • 2016-01-10
        • 2023-04-07
        • 2011-09-08
        • 1970-01-01
        • 2019-12-08
        • 2022-07-06
        • 1970-01-01
        • 2011-02-01
        相关资源
        最近更新 更多