新手应直接选用symfony 6.4 lts版——它虽非最新,但最稳定、文档最全、教程最多、bundle兼容性最佳,仅需php 8.1+即可运行,安装命令为composer create-project symfony/skeleton:^6.4 my_project。

新手直接选 Symfony 6.4 LTS 版——它不是“最新”,但最稳、文档最多、教程最全、Bundle 兼容性最好,PHP 8.1+ 就能跑,适合从零开始建项目。
安装命令和依赖结构明显不同
6.x 安装默认带 Flex v2 和 runtime 组件,命令是:
composer create-project symfony/skeleton:^6.4 my_project7.x 则强制要求 Flex v3+ 和 PHP 8.2+,且 runtime 成为必需项(不再隐式注入);若漏装或版本不匹配,bin/console 会直接报错找不到 Runtime 类。
关键区别在于:
- 6.x 的
composer.json中"symfony/flex": "^2.3"即可,7.x 必须是"^3.0" - 7.x 要求显式声明
"symfony/runtime": "^7.0",否则 Flex 不会自动注册运行时环境 - 7.x 默认禁用 XML 配置,首次安装后
config/packages/下只生成 YAML 和 PHP 文件,没有 XML 模板
PHP 和扩展门槛提高了一档
Symfony 6.4 支持 PHP 8.1 及以上,实际项目中用 8.1 或 8.2 都没问题;而 7.x 系列(含 7.0–7.4)最低要求 PHP 8.2,7.4 更推荐 PHP 8.3 —— 如果服务器还跑着 PHP 8.0 或更老版本,连 composer install 都会失败。
此外,7.x 对扩展依赖更严格:
-
ext-intl从“建议”变为“必需”,缺它会导致 Translation 组件初始化失败 -
ext-json和ext-pcre的最低版本要求提升(如 PCRE 2.0+) - Doctrine ORM 3.2+ 才完全适配 7.x,旧项目若还在用 2.13,得同步升级
配置方式和默认行为有实质变化
6.x 默认用 YAML 配置,也支持 PHP 格式,但只是“可选”;7.x 把 PHP 配置升为首推方式,官方新 Recipe(比如 maker-bundle)默认只生成 .php 配置文件。
典型差异包括:
- 路由定义:6.x 的
config/routes.yaml在 7.x 中被替换为config/routes.php,返回数组而非 YAML 结构 - 服务注册:7.x 强制使用属性(#[AsService]、#[Autoconfigure]),XML 和 YAML 中的
<service></service>标签已标记为废弃 - 环境变量加载:7.x 的
.env.local优先级高于.env,且不再自动加载.env.test,需手动在test/bootstrap.php中引入
新手容易踩坑的兼容点
不是所有“看起来一样”的写法在两个版本里都有效。比如:
-
$this->addFlash()在 Controller 中仍可用,但 7.x 要求类必须继承AbstractController(6.x 允许直接用ControllerTrait) - 6.x 支持
security.yaml中用encoders:配置密码哈希,7.x 已移除该键,改用password_hashers: - Twig 模板中
{{ asset() }}在 6.x 默认启用,在 7.x 必须显式启用symfony/asset包并配置assets.base_urls
不复杂但容易忽略。











