【问题标题】:CodeIgniter autoload specific classesCodeIgniter 自动加载特定类
【发布时间】:2014-04-10 13:37:47
【问题描述】:

我在 ./application/libraries 文件夹中创建了两个控制器,Public_Controller 和 Admin_Controller,遵循 Phil 的 Sturgeon example

我想做的是专门自动加载 Public_Controller 和 Admin_Controller,所以我在 ./application/config.php 中创建了这个自动加载函数

function __autoload($class) {

    // Autoload only Public_Controller and Admin_Controller
    if (strpos($class, 'CI_') !== 0) {
        $file = APPPATH . 'libraries/'. $class .'.php';
        if ( file_exists($file) && is_file($file) ) {
            @include_once($file);
        }
    }
}

我认为这个问题是我在库文件夹中包含更多文件,所以这些文件也是自动加载的,这不是我想要的。因此,我尝试对第一个 if 语句做一个小改动,如下所示:

if ( in_array($class, array('Public_Controller, Admin_Controller')) ) // instead of strpos

为了只针对这两个类,但这似乎不起作用。有什么想法我可能做错了吗?

【问题讨论】:

    标签: php codeigniter codeigniter-2 autoload


    【解决方案1】:

    我只想在前端自动加载Public_Controller,在管理员中自动加载Admin_Controller,所以autoload.php 已经退出了。在autoload.php 中,文件是全局加载的。 __autoload() 函数仅在调用时尝试自动加载类,但未找到。

    【讨论】:

    • 然后你可以这样做:$this->load->model('Model_name'); 在你想要的控制器里面。
    【解决方案2】:

    您可以使用您的方法。 __autoload()自动加载其他类。因为,根据 PHP 文档,

    __autoload() — 尝试加载 undefined 类。当您在没有以下功能的情况下调用(初始化)类文件时,您的类文件将被“自动”包含:“include、include_once、require、require_once”。

    所以不用担心其他类会自动运行。

    您可以将 Codeigniter 的内置 autoload 功能用作

    打开 application/config/autoload.php 文件并添加您的项目 想要加载到自动加载数组。您会在其中找到说明 文件对应于每种类型的项目。 - Codeigniter 文档

    希望这会有所帮助:)

    【讨论】:

    • 如果投反对票的人可以解释为什么投反对票,其他人也会更清楚!
    • 我遇到了 “您会在该文件中找到与每种类型的项目相对应的说明。” 我需要一个控制器自动加载器,但不支持。
    【解决方案3】:

    你不需要编写自动加载函数..codeiniter有一个用于自动加载特定文件的ibuilt函数...

    转到 applications/config/autoload.php 你可以在数组中添加你的特定文件

    $autoload['libraries'] = array('database', 'session','your-specific_file');
    

    【讨论】:

    • $autoload['libraries'] = array('database', 'session','folder/your-specific_file');我们可以这样做吗?
    • autoload 假定您已将自定义库放在 Codeigniter 提供的库文件夹中。
    【解决方案4】:

    转到applications/config/autoload.php,您可以在其中编辑您需要的内容。

    它们位于数组中,由packageslibrarieshelpersconfiglanguagesmodels 分隔。

    例如

    $autoload['libraries'] = array('database', 'session');
    
    $autoload['helper'] = array('url', 'html', 'form');
    

    【讨论】:

      【解决方案5】:

      无需编写自动加载功能 codeigniter 有自己的文件,用于自动加载库和帮助程序等文件

      您可以在特定数组中添加类名

      application/config/目录下的文件名应该是“autoload.php”

      【讨论】:

        猜你喜欢
        • 2020-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 2017-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多