CodeIgniter 3控制器use引入模型报类未找到错误如何解决
错误原因
CodeIgniter 3 没有内置对PHP命名空间的自动加载支持,直接通过use引入命名空间类、手动new实例的写法不符合框架的模型加载设计,因此触发Class 'models\TestModel' not found报错。
解决方案
推荐优先使用框架原生加载规则,稳定性和兼容性最好,非必要不自行修改自动加载逻辑。
方案1:使用CI3原生模型加载方式(推荐)
- 确认模型文件存放路径符合规范:
TestModel.php必须放在application/models/目录下,模型类定义格式如下:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class TestModel extends CI_Model { public function student_college() { // 业务逻辑代码 } }
- 控制器中移除
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实例的写法,需要额外配置自动加载规则:
- 给模型类添加对应命名空间,注意模型类要继承全局空间下的
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() { // 业务逻辑代码 } }
- 打开
application/config/config.php,将配置项$config['composer_autoload']的值改为TRUE,开启Composer自动加载支持。 - 编辑项目根目录的
composer.json,添加PSR-4自动加载映射规则:
{ "autoload": { "psr-4": { "models\\": "application/models/" } } }
- 在项目根目录执行命令
composer dump-autoload重新生成自动加载文件,原有控制器的写法即可正常运行。
注意:这种方式直接
new出来的模型实例默认无法直接调用框架内置方法,需要通过$CI =& get_instance();获取CI全局实例后才能调用框架类库,适配成本较高,非特殊场景不推荐使用。
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

