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

CodeIgniter 3报错:未定义属性CI_Loader::$yamaha_model及方法调用问题

解决CodeIgniter 3中控制器调用模型方法的错误问题

先给你拆解下遇到的两个错误根源:

  • 通知错误:未定义属性:CI_Loader::$yamaha_model —— $this->load是CI的加载器类实例,它本身并没有yamaha_model这个属性,直接通过$this->load->yamaha_model访问肯定会触发未定义属性的提示。
  • 致命错误:调用非对象的成员函数product() —— 既然$this->load->yamaha_model不存在(返回null),那调用它的product()方法自然就会触发这个致命错误。

你的问题核心是没正确加载模型就直接调用,而且调用模型的方式也错了。下面给你两种可行的解决方案:

方案一:在控制器中手动加载模型

在控制器的index方法开头先加载模型,再调用模型方法,修改后的控制器代码如下:

<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Yamaha extends CI_Controller {
    public function index(){
        // 先加载模型,这一步是关键!
        $this->load->model('yamaha_model');
        
        $template = array(
            'title' => 'YAMAHA',
            'heading' => 'My Heading',
            'message' => 'My Message'
        );
        // 现在可以直接通过$this->模型名来调用方法了
        $contents['row'] = $this->yamaha_model->product();
        $contents['cart_session'] = $this->session->userdata('cart_session');
        $template['content'] = $this->load->view('yamaha',$contents,TRUE);
        $this->load->view('template',$template);
    }
}

方案二:全局自动加载模型

如果这个yamaha_model在多个控制器里都会用到,你可以配置全局自动加载,省得每次都手动加载:

  1. 打开application/config/autoload.php文件
  2. 找到$autoload['model']这一行,把你的模型名加进去:
$autoload['model'] = array('yamaha_model');

配置完成后,你在任何控制器里都可以直接用$this->yamaha_model->product()调用方法,不需要再手动加载。

额外验证点

确保你的模型文件符合CI3的规范:

  • 模型文件必须放在application/models/目录下,文件名是Yamaha_model.php(首字母大写,Linux服务器对文件名大小写敏感,这点要注意)
  • 模型类名必须是Yamaha_model,和文件名完全一致,并且正确继承了CI_Model(你的模型代码这部分是没问题的)

其实你代码里注释掉的那行$contents['row'] = $this->yamaha_model->product();是完全正确的写法,只需要补上模型加载的步骤就可以正常运行了。

内容的提问来源于stack exchange,提问作者nut webplus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:22:21