Php 在Codeigniter 2中扩展多个模型

Php 在Codeigniter 2中扩展多个模型,php,codeigniter,codeigniter-2,Php,Codeigniter,Codeigniter 2,如何设置CI2以允许扩展多个模型 我只能让它扩展一个名为MY_model(区分大小写)的模型(放入/application/core) 选择我正在做的扩展模型; 在模型中 require_once APPPATH.'core/MY_Another_model.php'; class Test_model extends MY_Another_model { ... } 我在核心系统代码中找不到它只允许被扩展的模型被称为MY_模型的地方 谢谢您的帮助。您只需将两个类放在同一个MY_模型文件中。此

如何设置CI2以允许扩展多个模型

我只能让它扩展一个名为MY_model(区分大小写)的模型(放入/application/core)

选择我正在做的扩展模型; 在模型中

require_once APPPATH.'core/MY_Another_model.php';
class Test_model extends MY_Another_model {
...
}
我在核心系统代码中找不到它只允许被扩展的模型被称为MY_模型的地方

谢谢您的帮助。

您只需将两个类放在同一个MY_模型文件中。此文件用作codeigniter自动加载功能的一部分,这意味着它将查找任何带有MY_(或配置定义)前缀的文件


你甚至不需要在MY_Model中调用该类,你可以潜在地将其称为MY_Special_Model,并将MY_Other_Model直接放在下方

我尝试了Cubed Eye的方法,效果很好,但这里有另一个选项:

尝试将模型添加到autoload.php文件中。它可以从MY_模型(从CI_模型继承)继承,您加载的任何其他模型都可以从中继承:

class Extended_model extends MY_Model {
    public function __construct()
    {
        parent::__construct();
        $this->load->model('Another_model');
    }
}
(models/Extended_model.php)

(models/other_model.php)


编辑:我刚刚意识到您正在将扩展模型放在“核心”文件夹中。这仅适用于扩展核心CI_*类的类(即MY_控制器、MY_模型、MY_输入等)。如果您有一个扩展MY_模型的模型,请将其放在您的模型/文件夹中,并且不要在其前面加上“MY_”前缀。

最终您可以使用
load_class
函数尝试此方法:

这是您的模型扩展:
application/core/Special_model_class.php:

class CI_Special_model_class extends CI_Model {...}
php文件的名称没有CI_uuu前缀,尽管类本身有前缀

模型/文件夹中基于此类的模型:
application/models/one_model.php:

class One_model extends CI_Special_model_class {...}
load_class('Special_model_class', 'core');
class One_model extends CI_Special_model_class {...}
为了实现这一点,您应该从控制器调用
load\u类
函数:
应用程序/控制器/one_ctrl.php

....
load_class('Special_model_class', 'core');
$this->load->model('Special_model_class');
....
最终,您可以在定义模型之前,尝试在模型中调用
load\u class
。 application/models/one_model.php:

class One_model extends CI_Special_model_class {...}
load_class('Special_model_class', 'core');
class One_model extends CI_Special_model_class {...}

这是父模型类:

class MY_Common_Model extends CI_Model {

    function __construct() {
        parent::__construct();
    }
        function drop_table($table_name) {
        $this->connect();
         $this->dbforge->drop_table($table_name);

    }

}
class MY_Model extends MY_Common_Model {
     function inset_table($table_name) {
        $this->connect();
        $this->insert_table($table_name);

    }
}
 $this->drop_table($edge_table);
这是子模型类:

class MY_Common_Model extends CI_Model {

    function __construct() {
        parent::__construct();
    }
        function drop_table($table_name) {
        $this->connect();
         $this->dbforge->drop_table($table_name);

    }

}
class MY_Model extends MY_Common_Model {
     function inset_table($table_name) {
        $this->connect();
        $this->insert_table($table_name);

    }
}
 $this->drop_table($edge_table);
在型号中:

class MY_Common_Model extends CI_Model {

    function __construct() {
        parent::__construct();
    }
        function drop_table($table_name) {
        $this->connect();
         $this->dbforge->drop_table($table_name);

    }

}
class MY_Model extends MY_Common_Model {
     function inset_table($table_name) {
        $this->connect();
        $this->insert_table($table_name);

    }
}
 $this->drop_table($edge_table);

尽管我已经接受了上面的答案,但我还是投票支持这个问题,因为我喜欢每个模型都有单独的文件,而不是把它们都放在一个文件中。这正是我所做的!这并不漂亮,因为我喜欢将每个类放在一个单独的文件中。。。但这是我在CI中实现这一点的唯一方法。@MikeMurko有一种方法可以在单独的文件中拥有单独的类,但这涉及到创建一个自定义加载程序类,不值得花费时间和精力。我在我的_Model.php中有以下类:类Public _Model扩展了CI_Model{function u construct(){parent::u construct();}但它显示了以下错误:“MY_Model.php存在,但没有声明类MY_Model”我该怎么办?顺便说一句,我使用的是CodeIgniter 3.1