遇到未捕获RuntimeException:无法定位User_model模型,求解决方案
解决CodeIgniter中无法定位User_model的问题
别着急,我们一步步来排查和修复你遇到的问题:
一、先搞定「无法定位User_model」的核心报错
CodeIgniter(尤其是2.x/3.x版本)对模型的命名、存放路径有严格要求,这是最常见的报错根源:
- 模型文件命名规则:必须将模型文件命名为
User_model.php(首字母大写,后缀固定为_model.php),并且放在application/models/目录下。如果模型在子目录(比如application/models/auth/),加载时要带上路径:$this->load->model('auth/User_model'); - 类名必须和文件名一致:模型文件里的类定义必须严格对应文件名:
<?php class User_model extends CI_Model { // 你的业务方法写在这里 } ?>
- 正确加载模型:在控制器里加载模型时,两种写法都能生效(CI会自动处理大小写):
$this->load->model('User_model'); // 或者 $this->load->model('user_model');
如果之前改名字没用,大概率是文件名/类名的大小写没匹配,或者文件放错了目录。
二、修复你模型代码里的语法错误
你提供的模型代码有几个明显的语法问题,就算模型加载成功也会报错:
- 缺少完整的类和方法结构:完整的验证用户方法应该是这样的:
<?php class User_model extends CI_Model { public function __construct() { parent::__construct(); $this->load->database(); // 初始化数据库连接 } public function check_user($username, $password) { $this->db->where(array('username' => $username, 'password' => $password)); $result = $this->db->get('users'); if ($result->num_rows() == 1) { // 你之前的返回写法错误,这里直接返回用户ID即可 return $result->row()->id; // 或者先存变量再返回: // $user_id = $result->row(0)->id; // return $user_id; } else { return false; } } } ?>
- 错误的返回语句:你写的
$return->$result->row(0)->id;完全不符合语法,这里应该是直接返回查询结果的ID,或者赋值给变量后返回。 - 括号不匹配:你提供的代码末尾有两个
}},但缺少开头的类和方法的{,必须保证代码结构完整闭合。
三、额外排查小细节
- 检查
application/config/autoload.php是否自动加载了数据库:如果没开启自动加载,一定要在模型的构造函数里手动调用$this->load->database();,否则会出现$this->db未定义的错误。 - 确认CI版本:从报错路径看你用的是CI2/3版本,按上面的规则调整就好;如果是CI4,模型规则会完全不同,但你的报错明显对应旧版本。
按这些步骤调整后,应该就能解决模型找不到的问题,同时修复代码里的语法错误啦。
内容的提问来源于stack exchange,提问作者Hadi Hilal
相关产品推荐
相关产品推荐

