未找到CodeIgniter CI_Controller

时间:2012-01-16 10:39:50

标签: php codeigniter extend

基本上,下面是我现在的代码:

class MY_Log extends CI_Log {

    /**
    * Variable storing the CodeIgniter instance.
    *
    * @access private
    * @since v0.1.0.0
    */
    private $CI;

    /**
    * Constructor for later use by internal
    * methods.
    *
    * @access public
    * @since v0.1.0.0
    */
    public function __construct()
    {
        // Extend the parent logging.
        parent::__construct();

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

我收到以下错误;

Fatal error: Class 'CI_Controller' not found in /<deleted>/system/core/CodeIgniter.php on line 233

这是用户指南描述它的方式。

4 个答案:

答案 0 :(得分:4)

我想在加载CI_Controller类之前调用​​日志库函数时会发生此错误。这可能发生在您的应用程序例程的早期阶段。因此,您应该在不使用$this->$CI =& get_instance();的情况下扩展日志库。

答案 1 :(得分:3)

很奇怪。我刚刚复制了你的案例(提供的信息),我没有遇到任何问题。但要确保一些事情:

  1. 您的文件名为MY_Log.php,位于application/libraries/My_log.php
  2. 该文件扩展了父类,在本例中为CI_Log
  3. 您将控制器中的库称为

    $this->load->library('log');
    $this->log->do_something();
    

    即,不使用“My_log”而是使用父库的名称。事实上,你扩展它,而不是创建另一个,所以CI希望你把它称为与原来相同的

  4. 您的原始文件正确写入了以下行(在CI之前没有$符号)

    $this->CI =& get_instance();
    
  5. 我提供的代码的测试用例在我的开发机器上运行正常(Windows 7 WAMP php 5.3.8)。我会等待更多的信息。

答案 2 :(得分:0)

如果你还没有,请尝试将它放在MY_Log.php的顶部:

&lt;?php defined('BASEPATH')或退出('不允许直接访问脚本');

如果它没有包含在php分隔符中,那么你的类MY_Log可能实际上并没有被php解析。如果是这种情况,则CI将看到文件MY_Log.php,并期望CI_Log由MY_Log.php中声明的类扩展。但是,如果您的类不在PHP分隔符中,则CI_Log实际上不会被扩展,这可能会导致奇怪的错误。

答案 3 :(得分:0)

如果这有助于任何人,我遇到了同样的问题,并发现它只发生在其中包含+的网址上,例如作为永久链接的一部分。 CI变得混乱;我阻止了+个符号出现在网址中,一切都很顺利。