class not found本质是psr-4自动加载失败,非文件缺失;需严格确保路径、命名空间、composer配置、环境四者完全一致,新增或修改类后必须执行composer dump-autoload -o刷新映射。

ThinkPHP类自动加载失败,本质不是文件丢了,而是框架按PSR-4规则“找路”时走错了——路径、命名空间、配置、环境四者只要有一处不严丝合缝,就会报Class not found。
命名空间与路径必须完全对齐
ThinkPHP 6+ 完全依赖Composer的PSR-4映射,不额外兜底。例如:
- 控制器类
Index必须放在app/controller/Index.php,不能是index.php或IndexController.php - 命名空间必须写成
namespace appcontroller;(注意是appcontroller,不是AppController或app/controller/) - Linux服务器严格区分大小写:
Index.php≠index.php,controller≠Controller
composer autoload映射没更新
新增、重命名或移动类后,Composer不会自动感知。必须手动刷新映射:
- 运行
composer dump-autoload -o(加-o生成优化版,推荐始终使用) - 检查
vendor/composer/autoload_psr4.php,确认"app\": "app/"等映射指向真实目录 - 若项目改过应用目录名(如
app→src),需同步修改config/app.php中的app_namespace
vendor目录被多个项目共用
这是线上环境高频“隐形杀手”。多个TP项目共享vendor会导致autoload.php里硬编码的__DIR__路径错乱:
- 检查系统是否设置了
COMPOSER_VENDOR_DIR环境变量,有就立即删除 - 逐个项目执行:
rm -rf vendor composer.lock→composer install --no-dev --optimize-autoloader - 验证
vendor/autoload.php中__DIR__输出路径是否等于当前项目根目录
自定义目录未声明PSR-4规则
想在app/service/下放服务类?Composer默认不认识:
- 编辑
composer.json,在"autoload": {"psr-4": {}}里添加:"app\service\": "app/service/" - 注意:命名空间末尾双反斜杠、路径末尾斜杠,两者必须一致
- 保存后立刻执行
composer dump-autoload -o,否则新规则不生效
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











