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

CodeIgniter 3控制器use引入模型报类未找到错误如何解决

错误原因

CodeIgniter 3 没有内置对PHP命名空间的自动加载支持,直接通过use引入命名空间类、手动new实例的写法不符合框架的模型加载设计,因此触发Class 'models\TestModel' not found报错。

解决方案

推荐优先使用框架原生加载规则,稳定性和兼容性最好,非必要不自行修改自动加载逻辑。

方案1:使用CI3原生模型加载方式(推荐)

  1. 确认模型文件存放路径符合规范:TestModel.php必须放在application/models/目录下,模型类定义格式如下:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class TestModel extends CI_Model {
    public function student_college() {
        // 业务逻辑代码
    }
}
  1. 控制器中移除use \models\TestModel;引入语句,通过框架提供的load->model()方法加载后调用即可,修改后的控制器代码:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class TestController extends CI_Controller {

    public function student(){
        // 加载模型
        $this->load->model('TestModel');
        // 调用模型方法
        $value = $this->TestModel->student_college();
        echo $value;
    }
}

这种写法加载的模型会自动注入CI框架上下文,模型内可以直接使用$this->db、$this->input等框架内置方法,无需额外处理。

方案2:自定义自动加载支持命名空间写法

如果必须使用use引入+new实例的写法,需要额外配置自动加载规则:

  1. 给模型类添加对应命名空间,注意模型类要继承全局空间下的CI_Model,修改application/models/TestModel.php代码:
<?php
namespace models;
defined('BASEPATH') OR exit('No direct script access allowed');

class TestModel extends \CI_Model {
    public function student_college() {
        // 业务逻辑代码
    }
}
  1. 打开application/config/config.php,将配置项$config['composer_autoload']的值改为TRUE,开启Composer自动加载支持。
  2. 编辑项目根目录的composer.json,添加PSR-4自动加载映射规则:
{
  "autoload": {
    "psr-4": {
      "models\\": "application/models/"
    }
  }
}
  1. 在项目根目录执行命令composer dump-autoload重新生成自动加载文件,原有控制器的写法即可正常运行。

注意:这种方式直接new出来的模型实例默认无法直接调用框架内置方法,需要通过$CI =& get_instance();获取CI全局实例后才能调用框架类库,适配成本较高,非特殊场景不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:01:20