Class "appcontrollerIndex" not found 的根本原因是 Composer 自动加载未生效:psr-4 配置缺失或错误、命名空间与路径/文件名大小写不严格匹配、未执行 composer dump-autoload -o、或 vendor/autoload.php 未被入口文件正确引入。

Class "appcontrollerIndex" not found 这类报错,90% 不是框架坏了,而是自动加载根本没走到你写的那个类文件——ThinkPHP 6+ 已彻底交出自动加载控制权给 Composer,自己不维护路径映射,也不响应 Loader::addNamespace()。
composer.json 里没配 psr-4,类就不可能被找到
ThinkPHP 不会主动扫描 app/ 目录下的类,它只按 Composer 告诉它的规则去加载。如果你写了 appserviceConnection 类,但 composer.json 里没声明:
"autoload": {
"psr-4": {
"app\": "app/"
}
}那 new appserviceConnection() 就一定会失败。
-
psr-4键必须以双反斜杠结尾("app"),Windows 下漏掉第二个是高频错误 - 值是相对项目根目录的路径,结尾不能带斜杠(
"app/"❌,"app"✅) - 改完必须运行
composer dump-autoload -o,否则修改无效;加-o是为了生成autoload_classmap.php,开发阶段可先不加,但上线前必须加
类文件路径、命名空间、文件名三者必须严格对齐
自动加载不是“模糊匹配”,而是字符串精确拼接。比如:
立即学习“PHP免费学习笔记(深入)”;
- 类文件路径:
app/service/DatabaseConnection.php - 类名:
DatabaseConnection - 命名空间必须是:
appservice
任何一处不一致都会断链:
- 文件名写成
databaseconnection.php(小写)→ Linux 下直接 404 - 命名空间写成
Appservice(首字母大写)→ Composer 查不到App前缀 - 类名是
DbConnection,但文件叫DatabaseConnection.php→ 加载器拼出的路径根本不存在
vendor/autoload.php 没被引入,整个自动加载链就断了
ThinkPHP 入口文件 public/index.php 默认有这行:
require __DIR__ . '/../vendor/autoload.php';
但如果你重构过入口、或用了 Swoole CLI 模式、或把入口挪到别处,这行很容易被删掉或路径写错。
- 检查
public/index.php开头是否真实存在且能执行该require - 运行
php public/index.php时如果报Class 'ComposerAutoloadClassLoader' not found,基本就是这行失效了 - 不要用
require_once替换,也不要加条件判断包裹它——它必须无条件、第一时间加载
真正卡住人的地方,往往不是“怎么配”,而是“配了但没生效”——因为忘了 dump-autoload,或者路径大小写在本地 Windows 看不出问题,一上 Linux 就崩。自动加载没有中间态,要么全通,要么全断,没法“差不多”。



















