最稳妥的初始化方式是用 composer create-project,因其预置完整结构、避免手动写 composer.json 导致的 autoload 失效、psr-4 路径错误或框架类加载失败等问题,且不同框架须选对应官方骨架包(如 symfony 用 symfony/skeleton、laravel 用 laravel/laravel)。

直接用 composer create-project 初始化骨架是最稳妥的起点,别从空目录手写 composer.json 开始——90% 的框架搭建失败都卡在这一步的自动加载或依赖版本错位上。
为什么不能先写 composer.json 再装依赖?
手动创建 composer.json 后执行 composer install,容易忽略两个关键前提:
-
composer.lock不存在时,install会退化为update行为,但你没声明任何require,结果是 vendor 为空、autoload 失效 - PSR-4 映射若写错路径(比如
"App\": "src/"却没建src/目录),composer dump-autoload不报错,但运行时类找不到 - 框架类(如
Bootstrap)若放在非 PSR-4 规范路径(例如根目录下index.php同级放core/Bootstrap.php),不显式配置"files"就无法被自动加载
create-project 要选哪个包?
不同框架官方推荐的初始化包差异很大,选错会导致后续功能缺失或兼容问题:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Symfony:必须用
symfony/skeleton,不是symfony/framework-bundle—— 后者只是个 Bundle,没public/index.php和bin/console - ThinkPHP:用
topthink/think,它已预置app/、config/、runtime/结构和基础路由 - Laravel:用
laravel/laravel,而非laravel/framework—— 前者是完整项目,后者只是核心库 - 自研框架:需先发布到 Packagist 或私有源,再以
vendor/name格式调用;本地开发阶段可先用composer create-project --repository-url=file://$(pwd)/my-framework my-framework/my-framework .
工程化必须立即做的三件事
项目生成后别急着写业务,先加固结构:
- 删掉默认的
README.md模板,补全实际模块说明、环境要求(如 PHP ≥ 8.1)、启动命令(php -S localhost:8000 -t public) - 在
composer.json中明确"type": "project"(Symfony/Laravel 等依赖此字段做 autoloading 分区),别留空或误设为"library" - 把数据库配置、API 密钥等敏感项从
composer.json移出,改用.env+vonage/php-dotenv或原生getenv()加载,避免误提交
真正麻烦的从来不是“怎么装”,而是“装完之后类在哪、谁负责加载、错误信息指向哪一行”。框架工程化的分水岭,就在第一次 composer dump-autoload -o 跑通之后——那才是自动加载真正开始工作的时刻。










