You need to enable JavaScript to run this app. Windows 10下CodeIgniter4运行时提示UserModel类未找到的问题
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下CodeIgniter4运行时提示UserModel类未找到的问题

CodeIgniter 4 自定义模型未找到异常修复方案

报错信息

错误
未找到类 'CodeIgniter\Models\UserModel'
报错位置:APPPATH\Controllers\User.php 第42行
报错触发代码:$model = new UserModel();

核心问题

  • 控制器中模型的命名空间引入错误
  • 模型允许字段与构造的保存数组键名不匹配(后续会触发数据保存失败)

修复步骤

1. 修正控制器的模型引入命名空间

自定义模型存储于app/Models目录,对应命名空间为App\Models,而非框架核心的CodeIgniter\Models。
将app/Controllers/User.php中的错误引入语句:
use CodeIgniter\Models\UserModel;
替换为:
use App\Models\UserModel;

修正后的控制器开头代码示例:

<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use App\Models\UserModel;

2. 修正字段映射不匹配问题

模型中$allowedFields定义的是数据库实际字段名(如user_company、user_password),但register方法中构造的$newData数组键名是表单字段名(如company、password),二者不匹配会导致框架自动过滤未允许的字段,无法完成数据写入。

修正$newData的键名与数据库字段一致:

$newData = [
  'user_company'   => $this->request->getVar('company'),
  'user_email'     => $this->request->getVar('email'),
  'user_firstname' => $this->request->getVar('firstname'),
  'user_lastname'  => $this->request->getVar('lastname'),
  'user_password'  => $this->request->getVar('password')
];

同步修正密码哈希逻辑中的字段名:

将app/Models/UserModel.php中beforeInsert方法的字段判断逻辑修改为对应字段:

protected function beforeInsert(array $data) {
  if(isset($data['data']['user_password'])) {
    $data['data']['user_password'] = password_hash($data['data']['user_password'], PASSWORD_DEFAULT);
  }
  return $data;
}

(可选)修正创建时间字段映射:

如果数据库中的创建时间字段为user_created_at,需将模型中的$createdField修改为:
protected $createdField = 'user_created_at';


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 02:45:07