【问题标题】:CodeIgniter CI_Controller not found找不到 CodeIgniter CI_Controller
【发布时间】:2012-02-11 07:45:29
【问题描述】:

所以基本上,以下是我现在拥有的代码:

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

用户指南是这样描述的。

【问题讨论】:

  • 你的文件系统中是否有 system/core/Controller.php 文件?
  • 是的,第233行是:return CI_Controller::get_instance();
  • 我自己没有尝试过,但是您确定需要执行 get_instance 吗?在我一次尝试扩展 CI_Controller 时,我似乎可以通过 $this 访问 CI 对象(即 $this->load->vars($data); 现成可用)
  • 我收到“未定义的属性:MY_Log::$load”。愚蠢的图书馆有时让我发疯。

标签: php codeigniter extend


【解决方案1】:

我猜这个错误是在加载 CI_Controller 类之前调用​​日志库函数时发生的。这可能发生在您的应用程序例程的早期阶段。所以你应该扩展日志库而不使用$this-&gt;$CI =&amp; get_instance();

【讨论】:

    【解决方案2】:

    很奇怪。我刚刚复制了你的案例(提供的信息),我没有遇到任何问题。但请确保以下几点:

    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();
      

    您提供的代码的测试用例在我的开发机器(Windows 7 WAMP php 5.3.8)上运行良好。我会等待更多信息。

    【讨论】:

    • 1.这是正确的。 2. 正确。 3.确实,这样做。 4. 错了,但没有解决问题。一旦我将 log_treshold 设置为 1,它就会出错。
    • 嗯...您运行的是哪个 CI 版本?是全新安装吗?您是否更改了配置中的某些内容?您能否使用全新的 CI 副本重现该问题?
    • 我更改了配置中的许多内容,但只更改了默认值和选项。 base_url、index_page、url_suffix、encryption_key、sess_cookie_name 并打开 global_xss_filtering。就是这样。让我尝试全新安装。
    • 全新安装的结果相同。 CodeIgniter 2.1.0
    • 我的想法不多了...我无法在现有安装或新安装上重现该问题;甚至无法说出您还可以提供哪些信息……您是否收到相同的警告?你在加载常规库时得到它吗?
    【解决方案3】:

    如果你还没有,试着把它放在 MY_Log.php 的顶部:

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

    【讨论】:

      【解决方案4】:

      如果这对任何人都有帮助,我遇到了同样的问题,并注意到它只发生在其中包含 + 的 URL 上,例如作为永久链接的一部分。 CI 失控了;我阻止了+ 标志出现在 URL 中,一切都很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-01
        • 2013-11-04
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        • 2012-12-08
        • 2018-10-15
        相关资源
        最近更新 更多