如何在CodeIgniter中直接将控制器数据传至视图?报错求助
搞定CodeIgniter控制器传数据到视图时的模型调用错误
嘿,你遇到的这两个错误其实是同一个问题导致的——控制器没正确加载Data_Model模型,所以$this->Data_Model是个未定义的null值,自然没法调用它的Get_Data()方法。我给你一步步拆解解决办法:
先搞懂错误根源
- 第一个通知“未定义属性:Showdata::$Data_Model”:说明你的
Showdata控制器里根本没识别到Data_Model这个模型,相当于你要调用一个不存在的东西。 - 第二个异常“在null上调用成员函数Get_Data()”:因为模型没加载成功,
$this->Data_Model是null,你在null上调用方法肯定报错。
具体解决步骤
第一步:检查模型文件的命名和位置
CodeIgniter对文件命名有规矩的,模型文件得放在application/models/目录下,文件名要首字母大写(比如Data_model.php),而且类名要和文件名对应——比如文件是Data_model.php,类名就得是Data_model(或者你写成Data_Model也可以,但要保持一致,别一会儿大写一会儿小写)。第二步:在控制器里加载模型
模型不会自动加载,得你手动告诉控制器要用到它,有两种方式:- 在需要用的方法里临时加载:
在调用Get_Data()之前,先加一行加载代码,比如:public function show_data() { // 先加载模型 $this->load->model('Data_model'); // 再调用模型的方法拿数据 $data['result'] = $this->Data_model->Get_Data(); // 把数据传给视图 $this->load->view('your_view_file', $data); } - 在控制器构造函数里全局加载:
如果这个控制器的多个方法都要用到这个模型,直接在构造函数里加载,省得每个方法都写一遍:class Showdata extends CI_Controller { public function __construct() { parent::__construct(); // 全局加载模型,整个控制器都能用 $this->load->model('Data_model'); } public function show_data() { $data['result'] = $this->Data_model->Get_Data(); $this->load->view('data_view', $data); } }
- 在需要用的方法里临时加载:
第三步:检查模型类的方法定义
打开你的模型文件,确保Get_Data()方法确实存在,而且类继承了CI的模型类,比如:class Data_model extends CI_Model { public function __construct() { parent::__construct(); // 如果要操作数据库,记得加载数据库连接 $this->load->database(); } public function Get_Data() { // 这里写你的数据获取逻辑,比如查数据库 return $this->db->get('your_table_name')->result(); } }注意:如果你的模型放在
models的子目录里(比如models/admin/),加载的时候要带上路径:$this->load->model('admin/Data_model')。
最后再确认下
- 模型文件确实在
application/models/(或子目录)里,没放错地方; - 加载模型时的名称和模型类名完全一致(大小写在Windows上无所谓,但Linux上敏感,最好统一);
- 模型里的
Get_Data()方法没有拼写错误。
这样操作后,控制器就能正确调用模型拿到数据,再传递给视图了。
内容的提问来源于stack exchange,提问作者Nikhil Bante
相关产品推荐
相关产品推荐

