Php 在Codeigniter 2中扩展多个模型
如何设置CI2以允许扩展多个模型 我只能让它扩展一个名为MY_model(区分大小写)的模型(放入/application/core) 选择我正在做的扩展模型; 在模型中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_模型文件中。此
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