如何设置CI2以允许扩展多个模型?
我只能扩展名为 MY_Model 的一个模型(放入/ application / core)(区分大小写)。
选择要扩展的模型; 在模型中..
require_once APPPATH.'core/MY_Another_model.php';
class Test_model extends MY_Another_model {
...
}
我无法在核心系统代码中找到它所声明的位置,只允许将被扩展的模型称为MY_Model。
感谢您的帮助。
答案 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);