应使用 composer create-project 创建 symfony 项目,因其自动拉取官方骨架并初始化关键配置、脚本和环境文件;而 composer require symfony/symfony 是错误做法,该包已废弃且不提供路由、入口文件等框架必需组件。

直接用 composer create-project,别手动 require 或 git clone —— 否则容易漏掉项目骨架里的关键配置和脚本。
为什么不用 composer require symfony/symfony
这是最常见的误操作:把 Symfony 当成普通包装进已有项目。但 Symfony 是框架,不是库。symfony/symfony 包本身已废弃(自 4.0 起),且只含核心组件;它不带路由配置、环境管理、public/index.php 入口或 bin/console 命令——这些全靠项目骨架(skeleton)提供。
- 你执行
composer require symfony/symfony后,symfony/framework-bundle不会自动注册,config/bundles.php为空,应用根本跑不起来 - 没有
.env文件和APP_ENV=dev默认设置,报错时连调试模式都开不了 - 后续想加 Webpack Encore、Doctrine 或 MakerBundle,得自己查文档配 bundle 和 recipe,而 skeleton 已预置兼容逻辑
composer create-project 的三种常用写法
本质是拉取官方项目模板(skeleton),再由 Composer 自动安装依赖并执行初始化脚本(如生成密钥、设置权限)。区别只在目标版本和功能集:
- 最新稳定版(推荐新手):
composer create-project symfony/skeleton my-project - 带 Web 服务器和 Twig/ORM 等常用组件的“完整版”:
composer create-project symfony/website-skeleton my-project - 指定版本(例如 6.4 LTS):
composer create-project symfony/skeleton:^6.4 my-project
注意:website-skeleton 并非“更高级”,只是多预装了 symfony/twig-bundle、doctrine/doctrine-bundle 等,适合传统 MVC 场景;纯 API 项目用 skeleton 更轻量。
安装后必须立刻做的三件事
骨架生成后不是直接就能写控制器——有三个硬性检查点,跳过任一都会卡在下一步:
- 确认
APP_SECRET已生成:php bin/console secrets:generate-keys(否则 session、CSRF 会失败) - 检查
public/是否可被 Web 服务器访问:本地开发用php -S localhost:8000 -t public测试,别直接打开index.php - 运行
php bin/console about:若提示 “The process has been signaled with signal '5'”,大概率是 PHP 缺少mbstring或xml扩展,需补装
最常被忽略的是环境变量加载顺序:.env.local 会覆盖 .env,但 .env.test 只在 APP_ENV=test 时生效——改配置前先 echo $_SERVER['APP_ENV'] 确认当前环境,不然调半天发现根本没读到你写的变量。










