CodeIgniter 2:没有加载MY_Loader类

时间:2011-03-26 23:52:55

标签: php codeigniter

我一直在尝试覆盖加载器类(CI_Loader)的“数据库”方法。我按照CodeIgniter用户指南中的说明进行操作:Creating Libraries(滚动到“扩展本机库”)。但MY_Loader类不会自动加载,并且不会在$this->load调用中用于代替CI核心Loader类。 我只创建了MY_Loader类(用户指南中指定的application / libraries / MY_Loader.php)。有什么我想念的吗? 我已经尝试将它放在config / autoload.php中,用于该文件的libraries部分,它确实是自动加载的,但后来我使用$this->my_loader->database()访问该库,这不是主意...

我粘贴在application / libraries / MY_Loader.php

的内容下面
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Loader extends CI_Loader {

    function database($params = '', $return = FALSE, $active_record = NULL)
    {
        echo '---test---';
        exit;
    }
}

非常感谢。

2 个答案:

答案 0 :(得分:10)

loader类是核心的一部分,因此它需要进入“application / core / MY_Loader.php”

您要扩展的任何类都应该放在您的应用程序文件夹中的相应目录中。你应该能够把你写的课,放在那里,并预先......它应该工作。不需要黑客攻击。

答案 1 :(得分:0)

好的,我已经设法让它工作,但我不确定它是最好还是最优雅的方式。 首先,我在库部分的application / config / autoload.php中添加了“my_loader”。 然后我检查了控制器中的$this->load是什么,它是CI_Loader实例,所以在MY_Loader类的构造函数中,我创建了一个CI引用,并用对MY_Loader的引用替换了它的load属性:$CI->load = $this;

最终的MY_Loader类是:

class MY_Loader extends CI_Loader {

    function __construct() {
        parent::__construct();

        $CI =& get_instance();
        $CI->load = $this;
    }

    function database($params = '', $return = FALSE, $active_record = NULL)
    {
        parent::database($params, $return, $active_record);

        // bootstrap doctrine
        require_once APPPATH . DIRECTORY_SEPARATOR . 'hooks' . DIRECTORY_SEPARATOR . 'doctrine' . EXT;
        bootstrap_doctrine();
    }
}

如果您有更好/更智能的解决方案,请发布答案。感谢。