2011-11-15 43 views
5

如何设置CI2以允许扩展多个模型?在Codeigniter 2中扩展多个模型

我只能得到它扩展名为MY_Model(区分大小写)的一个模型(放入/应用程序/核心)。

要选择正在扩展的模型; 模型..

require_once APPPATH.'core/MY_Another_model.php'; 
class Test_model extends MY_Another_model { 
... 
} 

我找不到在哪里在它只有各国允许正在扩展的模型被称为MY_Model核心系统的代码。

谢谢你的任何和所有帮助。

回答

4

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

你甚至都不需要调用内部MY_Model类,你有可能把它MY_Special_Model并有MY_Another_Model的正下方

+0

这正是我所做的!这不是很好,因为我喜欢将每个课程放在一个单独的文件中......但这是我在CI中实现这一目标的唯一方法。 – MikeMurko

+0

@MikeMurko有一种方法可以在单独的文件中创建单独的类,但它涉及到创建自定义的装载器类,不值得花时间和精力。 –

+0

@CubedEye感谢您的提示 - 在MY_Model.php伟大工程:) – 2013-05-25 14:10:38

9

我已经试过立方眼的方式,和它的作品,但这里的另一种选择:

尝试将模型添加到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_”作为前缀。

+0

尽管我已经接受了上述答案,但我已经投票赞成,因为我喜欢为每个模型分开文件,而不是将它们全部填充到一个文件中。 – Rooneyl

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功能:
application/controllers/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 {...} 
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);