应使用 composer create-project 创建 Symfony 项目,因其生成标准结构(含 bin/console、.env 等),而 composer require symfony/symfony 仅安装裸库且该包已废弃;推荐用 symfony/skeleton 或 website-skeleton,并安装后执行 composer install、检查 .env、运行 cache:clear。

直接用 composer create-project,别手动生成 composer.json 再 require —— 那样装出来的不是标准 Symfony 项目结构,后续命令(比如 bin/console)会报错。
为什么不用 composer require symfony/symfony
这个命令只装核心包,不带项目骨架、路由配置、环境文件(.env)、public/index.php 或 bin/console。你得到的是一个“裸库”,不是可运行的 Web 应用。
- Symfony 官方推荐且唯一保证结构正确的入口是
create-project -
symfony/symfony包已废弃(自 Symfony 4 起),现在按组件拆分,如symfony/framework-bundle - 手动
require后还得自己配Kernel、routes.yaml、services.yaml,极易漏掉关键初始化逻辑
create-project 的三种常用写法及区别
不同写法决定项目起点:是否含 Web 服务器配置、是否预装 Doctrine、是否启用 Flex 自动配置。
-
composer create-project symfony/skeleton my_project:最小骨架,无 Web 服务、无模板引擎、无数据库支持,适合 API 或微服务 -
composer create-project symfony/website-skeleton my_project:含 Twig、WebServerBundle、AssetMapper、基础 CSS/JS 构建支持,适合传统 Web 站点 -
composer create-project symfony/skeleton my_project --version=6.4.*:显式指定稳定小版本,避免拉到 alpha/beta 分支(默认可能取 latest,而 latest 有时指向开发版)
注意:skeleton 和 website-skeleton 都基于 Symfony Flex,会自动执行 recipes 注入配置文件 —— 这步不可跳过,否则 cache:clear 会因缺少 config/packages/framework.yaml 失败。
安装后必须立刻做的三件事
刚跑完 create-project,项目还不能直接跑起来,缺几个关键初始化动作:
- 运行
composer install(即使create-project已执行过,也要再跑一次 —— 它会触发 Flex 的 recipe 安装和assets:install) - 检查
.env文件里APP_ENV是否为dev(生产环境别忘改成prod并清缓存) - 首次启动前先执行
php bin/console cache:clear:否则会报Unable to write in the cache directory,因为var/cache目录权限或所有权不对(尤其在 Docker 或 WSL 下)
常见错误现象:Too few arguments to function App\Kernel::__construct() —— 通常是 config/bundles.php 缺失或格式错误,源于 Flex recipe 未正确注入,此时删掉 vendor 和 composer.lock,重跑 create-project 更省事。
Flex 的自动配置逻辑藏在 composer.json 的 extra.symfony.id 和 scripts 里,一旦手动改过这些字段,recipe 就可能失效;遇到奇怪的配置缺失,优先怀疑是不是动过 composer.json 里的 extra 段。










