找不到codeigniter MY_Controller

时间:2012-11-20 22:59:36

标签: php codeigniter controllers extending-classes

我正在使用Codeigniter.2.1.3进行网站,所以我需要扩展CI_Controller,这样我就可以添加一个方法来执行所有控制器,所以我做了user_guide中的内容:

在application / core文件夹中创建一个名为MY_Controller.php的文件,在其中创建MY_Controller扩展CI_Controller的类,更改我的常规控制器以扩展MY_controller,如下所示: MY_controller.php:

class MY_Controller extends CI_Controller{
    protected $page;
    # Constructor
    function __construct (){
        parent::__construct();
        #code shared with all controllers
    }
    public function get_page(){
        #code to get_the right page here
    }
}

名为Regular.php的常规控制器:

class Regular extends MY_Controller{
     public function __construct(){
         parent::__construct();
     }
     public function index(){
          $this->get_page();
     }
}

但出现以下错误:

  

致命错误:第2行的/var/www/immo/CodeIgniter_2.1.3/application/controllers/regular.php中找不到“MY_Controller”类

5 个答案:

答案 0 :(得分:12)

您需要包含MY_Controller课程或自动加载课程。我建议您通过在application/config/config.php文件中添加以下内容来自动加载它。

function __autoload($class)
{
    if (strpos($class, 'CI_') !== 0)
    {
        if (file_exists($file = APPPATH . 'core/' . $class . EXT))
        {
            include $file;
        }
    }
} 

答案 1 :(得分:4)

确保文件名完全正确。 Linux服务器区分大小写。因此,如果类名是My_Controller,则文件名应为My_Controller.php

答案 2 :(得分:1)

$config['subclass_prefix'] = "MY_"

config.php中检查一下,当然你应该在控制器名称中使用它,例如MY_Controller.php和命名 “类MY_Controller ....”

答案 3 :(得分:0)

这个答案迟到了,但我得到了#34;致命错误:未找到“MY_Controller”类"当我在Web根目录下使用相同名称的控制器(php)文件而不是application / controllers目录时出错。实际上,不知道它是如何到达那里的,但当我删除它时问题就消失了。

答案 4 :(得分:0)

config / config.php

/* load class in core folder */
function my_load($class) {        

    if (strpos($class, 'CI_') !== 0) {            
        if (is_readable(APPPATH . 'core' . DIRECTORY_SEPARATOR . $class . '.php' )) {                
            require_once (APPPATH . 'core' . DIRECTORY_SEPARATOR . $class . '.php');                
        }
    }

}

spl_autoload_register('my_load');