You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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也可以,但要保持一致,别一会儿大写一会儿小写)。

  • 第二步:在控制器里加载模型
    模型不会自动加载,得你手动告诉控制器要用到它,有两种方式:

    1. 在需要用的方法里临时加载:
      在调用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);
      }
      
    2. 在控制器构造函数里全局加载:
      如果这个控制器的多个方法都要用到这个模型,直接在构造函数里加载,省得每个方法都写一遍:
      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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:06:02