Codeigniter中控制器之间的继承

时间:2014-08-28 04:04:25

标签: php codeigniter

假设我在'applcation / controllers'中有2个控制器文件:base_controller.php和child_controller.php

文件:base_controller.php:

class Base_controller extends CI_Controller{
    parent::__construct();

// some functions
}

在child_controller.php中,我写道:

class Child_controller extends Base_controller {
    parent::__construct();

// some functions
}

抛出错误意味着找不到'Base_controller'。请帮助!

4 个答案:

答案 0 :(得分:1)

在CI中扩展核心类需要一个前缀(在配置文件中默认为'MY')。

您需要使用名为MY_Base_controller的类扩展CI_Controller并将其保存在application / libraries文件夹下。

在此之后,您可以使用子控制器对其进行进一步的分类。

请参阅此处以获取详细概述

MY Controller

答案 1 :(得分:1)

这是你的脚本

class Base_controller extends CI_Controller{
    parent::__construct();

// some functions
}

在child_controller.php中,你写:

class Child_controller extends Base_controller {
    parent::__construct();

// some functions
}

您的子控制器应该有变化

include('base_controller.php'); //you should add this so that you can inherit//
class Child_controller extends Base_controller {
    parent::__construct();

// some functions
}

答案 2 :(得分:0)

更好的方法是创建MY_Controller并在MY_Controller中包含Base_Controller,因为你知道MY_controller将自动加载它也将加载Base_Controller,将它们保存在application / core目录中

<强> Base_Controller

class Base_controller extends MY_Controller{
    function __construct(){
          parent::__construct();
    }

// some functions
}

<强> MY_Controller

class MY_controller extends CI_Controller{
    function __construct(){
          parent::__construct();
    }

// some functions
}
include('Base_Controller'.EXT); // if this not work try following
include(APPPATH . 'core/Base_Controller'.EXT);

<强> Child_Controller

class Child_controller extends Base_Controller{
        function __construct(){
              parent::__construct();
        }

    // some functions
    }

答案 3 :(得分:0)

文件:application / core / MY_Controller.php

class MY_Controller extends CI_Controller{
    parent::__construct();

}

文件:application / core / Backend_Controller.php

class Backend_Controller extends MY_Controller {
    parent::__construct();

}

文件:application / core / Admin_Controller.php

class Admin_Controller extends Backend_Controller {
    parent::__construct();

}

设置自动加载:application / config / config.php

$config['proxy_ips'] = ''; //after this 

/* 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');