在Codeigniter 2中扩展多个模型

时间:2011-11-15 13:15:07

标签: 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_Model。

感谢您的帮助。

4 个答案:

答案 0 :(得分:9)

我已经尝试了Cubed Eye的方式,但它确实有效,但这是另一种选择:

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

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

(型号/ Extended_model.php)

class Another_model extends Extended_model {
}

(型号/ Another_model.php)

编辑:我刚刚意识到您将扩展模型放在“核心”文件夹中。这仅适用于扩展核心CI_ *类的类(即MY_Controller,MY_Model,MY_Input等)。如果您的模型扩展了MY_Model,请将其放在模型/文件夹中,而不要在其前面添加“MY _”。

答案 1 :(得分:4)

As I said in this question about the controllers您只需将两个类放在同一个MY_Model文件中。此文件用作codeigniter的自动加载功能的一部分,这意味着它将查找具有MY_(或配置定义)前缀的任何文件。

您甚至不需要在MY_Model中调用该类,您可以将其称为MY_Special_Model并直接在其下面安装MY_Another_Model

答案 2 :(得分:1)

最后,您可以使用load_class函数

尝试此黑客攻击

这是您的型号扩展名:
应用/核心/ Special_model_class.php:

class CI_Special_model_class extends CI_Model {...}

php文件的名称没有CI_前缀,尽管类本身带有前缀!

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

class One_model extends CI_Special_model_class {...}

为了使其工作,您应该从控制器调用load_class功能:
应用/控制器/ one_ctrl.php

....
load_class('Special_model_class', 'core');
$this->load->model('Special_model_class');
....

最终,您可以尝试在定义模型之前调用模型中的load_class。 应用/模型/ one_model.php:

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

答案 3 :(得分:0)

以下是父模型类:

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