我有这段代码:
class MY_Language extends CI_Language {
function MY_Language()
{
parent::CI_Language();
$CI =& get_instance();
$CI->load->model('language_model');
$languages = $this->language_model->get_languages();
print_r($languages);
}
}
但我一直得到“致命错误:在第44行的C:\ xampp \ htdocs \ application \ libraries \ MY_Language.php中调用未定义的函数get_instance()”。有任何想法吗? 提前谢谢!
答案 0 :(得分:4)
框架在CodeIgniter基础对象之前创建Language对象。因此,在代码中您将无法使用基础对象。实际上,还没有包含codeigniter / Base5.php文件。该文件定义了get_instance函数。这就是你得到这个特殊错误的原因。
如果你查看codeigniter / CodeIgniter.php文件,你会看到
$LANG =& load_class('Language');
出现在
之前require(BASEPATH.'codeigniter/Base5'.EXT);
修改强>
根据您在下面的评论,我认为您应该能够获得数据库的实例,如下所示。这是从Loader类的数据库函数中挖掘出来的。
require_once BASEPATH.'database/DB'.EXT;
$db = DB('', false);
答案 1 :(得分:1)
$languages = $CI->language_model->get_languages();
但首先需要首先使用正常加载或自动加载来加载数据库类。
$this->load->database(); or $autoload['libraries'] = array('database');
如果你使用自动加载来加载你的实例,你应该按照正确的顺序排列它。
$autoload['libraries'] = array('database', 'your_library_name');
在库$CI->load->model('language_model')
中加载了模型,您实际上已经在CI实例上附加了模型。您可以轻松地从CI实例中获取它。
答案 2 :(得分:0)
假设您的类存在于application / libraries文件夹中,即field_validation.php和模型中存在的其他类名,即Fields_model.php。
您需要执行以下步骤,在库中和库构造函数中创建公共对象名称$ ci,执行以下步骤。
加载CodeIgniter全局对象($ CI =& get_instance())。
您可以从CodeIgniter全局对象访问您的模型 ($ CI->负载>模型(' Fields_model&#39))。
将CodeIgniter对象分配给 公共变量,你可以访问模型函数( $这 - > CI-> Fields_model-> applyValidation())。
按照底部的示例进行操作。
class FieldValidation {
public $ci;
public function __construct() {
$CI = & get_instance();
$CI->load->model('Fields_model');
$this->ci = $CI;
}
public function applyValidation(){
$this->ci->Fields_model->applyValidation();
}
}