psr-4映射需严格匹配:命名空间末尾加双反斜杠(如"app\"),路径为相对composer.json的绝对路径片段(如"src/"),修改后必须运行composer dump-autoload生效。

composer.json 里怎么写 PSR-4 映射才生效
PSR-4 自动加载不会“猜”你的目录结构,必须严格匹配命名空间前缀和物理路径。常见错误是把 src/ 写成 ./src 或漏掉末尾斜杠,导致 composer dump-autoload 后类依然找不到。
- 映射值必须是相对于
composer.json所在目录的**绝对路径片段**(不加./,也不用__DIR__) - 命名空间前缀末尾要带反斜杠,比如
"App\",不是"App";否则子命名空间如AppControllersHome会被截断 - 路径末尾不加斜杠,但目录必须真实存在——
"src"对应磁盘上的./src/目录 - 修改后一定要运行
composer dump-autoload,仅composer install不会重生成 autoload 配置
{
"autoload": {
"psr-4": {
"App\": "src/"
}
}
}
类文件名和路径为什么总报 Class not found
PSR-4 要求类名完全对应文件路径,大小写敏感,且不依赖文件扩展名。Linux/macOS 下 MyClass.php 和 myclass.php 是两个文件,但 new MyClass() 只会找前者。
- 命名空间
AppControllers+ 类名HomeController→ 必须放在src/Controllers/HomeController.php - 子目录名、类名、命名空间段必须一一对应,不能用下划线代替驼峰,比如
Home_controller.php不行 - 文件编码必须是 UTF-8 无 BOM,BOM 会导致解析时类声明被干扰,报
ParseError: syntax error - 如果用了 traits 或 interfaces,它们同样要遵守 PSR-4 路径规则,不能只给 class 开绿灯
vendor/autoload.php 引入后还是找不到自定义类
根本原因通常是自动加载器没加载到你的配置——要么 composer.json 不在项目根目录,要么你手动 require 的是旧版 vendor/autoload.php(比如从其他项目复制过来的)。
绿色健美瑜伽美容类网站模板(带手机端)自带人人站内核安装即用,支持手机端,图片和文字均已完成可视化,支持伪惊天,多种内容模型可按需求添加。模板特点: 1、安装即用,自带人人站CMS内核及企业站展示功能(产品,新闻,案例展示等),并可根据需要增加表单 搜索等功能(自带模板) 2、支持手机端 3、前端banner轮播图文本均已进行可视化配置 4、伪静态页面生成 5、支持内容模型、多语言、自定义表单、筛
- 确认
require __DIR__ . '/vendor/autoload.php';中的路径指向的是当前项目的vendor/,不是父级或缓存副本 - 检查
vendor/composer/autoload_psr4.php是否已包含你的映射项;如果没有,说明dump-autoload没成功执行或 JSON 格式有误 - 如果你在非标准位置运行脚本(比如
tests/runner.php),__DIR__可能不是项目根,要用dirname(__DIR__)往上跳 - 避免在
autoload里混用psr-4和files,后者是全局加载,容易掩盖路径问题
开发中改了命名空间但 autoload 没更新
Composer 不监听文件变更,它只认 composer.json 和 dump-autoload 命令。改完命名空间后不重新生成 autoload,PHP 还是按旧映射去找文件。
- 每次调整命名空间或目录结构,都要运行
composer dump-autoload -o(-o表示优化,生成静态映射,开发期可省略但上线必须加) - 如果用了
autoload-dev,记得 dev 环境也要单独 dump:composer dump-autoload --dev - CI/CD 中容易忽略这点:构建镜像时若只
composer install,而没跑dump-autoload,就会复现本地“明明能跑”的问题
PSR-4 看似简单,真正卡住人的永远是路径拼写、斜杠方向、大小写、以及那个你以为跑过了其实没跑的 dump-autoload。









