class not found 错误是 psr-4 自动加载失败的典型表现,需严格检查命名空间与路径是否完全一致(含大小写)、composer.json 中 psr-4 配置是否正确(如 "app\": "app/")、执行 composer dump-autoload -o 刷新映射。

ThinkPHP 报错不是代码写错了,而是框架在“按规则找东西”时没对上路标——路径、命名空间、配置、环境四者只要有一处偏差,就会触发看似离谱的错误。
Class not found 错误怎么快速定位
这不是类文件丢了,是 PSR-4 自动加载失败的典型表现。ThinkPHP 6+ 严格依赖 namespace 与磁盘路径完全一致,差一个字母大小写、多一斜杠、少一层目录都会崩。
- 检查
app/controller/Index.php的命名空间是否为namespace appcontroller;,不能写成AppController或app/controller/(末尾斜杠) - Linux 服务器下
Index.php和index.php是两个文件;Windows 开发没问题,部署后立刻报错 - 运行
composer dump-autoload -o强制刷新映射,别只清缓存或改完就跑 - 确认
composer.json中"autoload": {"psr-4": {"app\": "app/"}}没被意外删掉或改错
Db::table()->find() 返回 null 但数据明明存在
不是 SQL 写错了,是主键字段名不匹配。ThinkPHP 默认把 find(123) 解析成 WHERE id = 123,你的表主键若叫 uid 或 user_id,就必然查不到。
- 临时方案:
Db::name('user')->pk('uid')->find(123) - 长期方案:建
UserModel,并在类中声明protected $pk = 'uid'; - 注意:
Db::table()不读模型配置,pk()必须显式调用 - 开启
log.sql = true查看真实执行语句,比猜快得多
模板 fetch() 报“模板文件不存在”但文件确实在
ThinkPHP 默认按 模块/控制器/操作 拼路径,不是你传什么它就找什么。路径拼错、大小写不一致、后缀没配对,都会静默失败。
-
$this->fetch('index')→ 实际找的是view/index.html,不是当前控制器下的view/index/index.html -
config/view.php中'view_path' => './app/view/'必须带开头的./,漏掉会变成绝对路径 -
view_suffix默认是'html',模板叫index.php就得写$this->fetch('index', 'php') - 日志里搜
Template not exists:,它会打出 ThinkPHP 真正尝试加载的完整绝对路径
路由注册了但访问 404
不是路由没写,是请求根本没进到路由解析环节。常见于 URL 重写未生效、入口配置错位、或 Nginx/Apache 配置缺失。
- 能访问
/index.php/index/index但不能访问/index/index→ 说明伪静态没开 - Apache 要启用
mod_rewrite并确保项目根目录有正确.htaccess - Nginx server 块中必须加
try_files $uri $uri/ /index.php?$query_string; - 命令行执行
php think route:list,确认目标路由在列表里且 HTTP 方法(GET/POST)匹配
最常被忽略的是环境变量加载前提:APP_DEBUG 必须为 true,.env 文件才生效;且 DB_HOST 这种键名必须全大写加下划线,小写或驼峰一律读不到。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











