多数人执行composer init后报“class not found”,是因为交互中跳过autoload配置,导致composer.json缺失autoload区块;必须手动配置psr-4映射(如"app\": "src/"),并运行composer dump-autoload -o验证类加载。

直接运行 composer init 就能生成基础 composer.json,但默认交互式向导容易填错关键字段(比如 autoload 或 require-dev),导致后续自动加载失败或测试依赖不生效。
为什么 composer init 填完还报错 “Class not found”?
多数人卡在这一步:向导问到 Autoloading 时直接回车跳过,结果生成的 composer.json 没写 "autoload" 配置。PHP 找不到你的类,自然报错。
- 必须手动选
psr-4并填对命名空间和路径,例如"App\": "src/" - 如果项目用
src/目录放代码,但填成"App\": "app/",composer dump-autoload后照样找不到类 - 填完别急着退出,检查生成的文件里是否有
"autoload"和"autoload-dev"区块
如何跳过向导、用命令行一次性生成最小可用配置?
适合 CI 初始化或脚本化场景,避免手误。关键是把必要字段全塞进一条命令里:
composer init --name="myvendor/myproject" --description="My awesome project" --type="project" --license="MIT" --homepage="https://example.com" --require="php:^8.1" --autoload="psr-4:App\:src/" --no-interaction
注意:--autoload 的值格式是 规则:命名空间:路径,中间用英文冒号分隔,反斜杠要转义(Shell 中写两个 \);--no-interaction 是关键开关,否则仍会停在交互环节。
composer init 生成的 require-dev 为什么没包含 phpunit?
向导默认只列了 phpunit/phpunit 作为示例,但不会自动加入——它只帮你填空,不替你决策依赖。
- 想加测试框架,得在
Which packages would you like to require for development?这步手动输入phpunit/phpunit:^10 - 如果输错版本(如写成
^9.6却用 PHP 8.2),后面composer install会因版本冲突失败 - 更稳妥的做法:先
composer init生成骨架,再单独执行composer require --dev phpunit/phpunit:^10
真正麻烦的不是生成文件,而是 autoload 路径和命名空间的映射关系一旦写错,错误不会立刻暴露,往往到第一次 new AppSomeClass() 才崩——所以生成后务必立即跑 composer dump-autoload -o 并验证一个最简类能否被加载。











