8

我正在将 Codeigniter.2.1.3 用于网站,所以我需要扩展 CI_Controller 以便我可以添加一个与所有控制器一起执行的方法,所以我做了 user_guide 中的内容:

在 application/core 文件夹中创建一个名为 MY_Controller.php 的文件,在其中创建扩展 CI_Controller 的 MY_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'

4

5 回答 5

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;
        }
    }
} 
于 2012-11-21T01:28:55.897 回答
4

确保文件名大小写正确。Linux 服务器区分大小写。所以如果类名是 My_Controller 那么文件名应该是 My_Controller.php

于 2013-10-05T18:28:50.583 回答
2

$config['subclass_prefix'] = "MY_"

签入config.php,当然你应该在 Controller Name LikeMY_Controller.php和 Named "class MY_Controller...."中使用它

于 2016-02-28T16:41:29.953 回答
2

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');
于 2018-08-14T06:52:16.973 回答
0

这个答案迟到了,但我得到了

“致命错误:找不到类 'MY_Controller'”错误

当我.php在 web 根目录而不是 application/controllers 目录中有一个同名的控制器 () 文件时。

实际上,不知道它是如何到达那里的,但是当我删除它时问题就消失了。

于 2016-04-04T14:40:10.397 回答