新手应选Symfony 6.4 LTS版——它最稳定、文档最全、教程最多、Bundle兼容性最佳,仅需PHP 8.1+;而7.x要求PHP 8.2+、Flex v3+、显式声明runtime,配置默认只生成PHP文件,强制readonly控制器与never返回类型,且移除encoders改用password_hashers。

新手直接装 Symfony 7.x 没问题,但得清楚它和 6.x 不只是“版本升级”,而是开发习惯、配置路径和目录逻辑的明显转向。安装过程看似只差一条命令,背后却是 PHP 版本门槛、默认配置方式、文件生成规则和目录职责的系统性调整。
PHP 和环境要求更严格
7.x 系统性抬高了运行门槛:
- 最低要求 PHP 8.2,7.4 版本推荐用 PHP 8.3;PHP 8.1 或更低版本连
composer install都会失败 -
ext-intl从“建议”变成“必需”,缺它 Translation 组件直接初始化失败 -
ext-pcre要求 ≥ 2.0,ext-json也提高了最小版本限制 - Doctrine ORM 必须 ≥ 3.2,旧项目若还在用 2.13,得同步升级 Doctrine 才能跑通
安装命令与默认依赖结构不同
两条主流安装路径,行为差异明显:
- 用 Composer:执行
composer create-project symfony/skeleton:^7.0 my_project,但必须确保已装 Flex v3+("symfony/flex": "^3.0")和显式声明"symfony/runtime": "^7.0",否则bin/console启动即报错找不到 Runtime 类 - 用 Symfony CLI:
symfony new my_project --full会自动适配 7.x 规则,包括预置 runtime、禁用 XML 配置、只生成.php配置文件 - 7.x 默认不生成 XML 配置模板,
config/packages/下只有 YAML 和 PHP 文件;若项目里还保留services.xml,会被标记为废弃
目录结构与核心文件生成逻辑变了
不是“多几个文件”,而是生成策略和默认行为重构:
- 路由配置默认是
config/routes.php(返回数组),不再有config/routes.yaml - 服务定义强制倾向属性方式:如
#[AsService]、#[Autoconfigure],YAML/XML 中的<service></service>标签已废弃 -
.env.local优先级高于.env,但.env.test不再自动加载,需手动在test/bootstrap.php中引入 - 控制器类默认设为
readonly,$this->user = ...这类赋值会直接报错;跳转方法如redirectToRoute()推荐声明返回never类型
配置方式全面转向 PHP 优先
7.x 把 PHP 配置从“可选”升为“首推”,官方 Recipe(比如 maker-bundle)只生成 .php 文件:
-
config/services.php成为主力配置入口,defaults:、bind:等 YAML 块应迁移至此 - 安全配置中
encoders:已移除,统一改用password_hashers: - Controller 必须继承
AbstractController才能用$this->addFlash();仅用ControllerTrait在 7.x 不再兼容 - 环境变量插值(如
%env(DATABASE_URL)%)在开发模式下实时解析,生产环境需确保缓存已预编译,否则启动失败

















