Composer中需在composer.json的autoload字段配置psr-4(如”App\\”: “app/”)和classmap(如[“lib/”, “helpers/functions.php”]),修改后必须运行composer dump-autoload生效。
composer.json 里怎么配 autoload 的 psr-4 和 classmap
Composer 默认只加载 src/ 下符合 PSR-4 规范的类,想让自己的目录(比如 app/、lib/ 或 core/)也被自动加载,得手动改 composer.json 的 "autoload" 字段。
PSR-4 适合命名空间明确、结构清晰的代码;classmap 更灵活,适合老项目或无命名空间的类文件。
-
psr-4:写成"App\\": "app/",注意末尾斜杠和命名空间末尾双反斜杠 -
classmap:直接列路径,支持目录或具体文件,例如"classmap": ["lib/", "helpers/functions.php"] - 改完必须运行
composer dump-autoload,否则不生效 - 开发中频繁增删类时,
classmap比psr-4多一步——要重新生成映射:composer dump-autoload -o
为什么 vendor/autoload.php 加载不了我新写的类
常见原因不是路径写错,而是没触发自动加载注册或映射未更新。
- 确认是否执行过
composer dump-autoload(非install或update自动触发) - 检查 PHP 是否真的引入了
vendor/autoload.php,而不是自己手写了一个假的加载器 - 如果用了
psr-4,类文件路径必须严格匹配命名空间,比如App\Controllers\HomeController必须在app/Controllers/HomeController.php - Windows 下路径大小写不敏感,但 Linux/macOS 敏感——
app/Controllers/homecontroller.php会加载失败
autoload-dev 怎么和正式 autoload 分开用
测试类、工厂类、Mock 类这些不该进生产环境,就该塞进 "autoload-dev"。