Symfony 7.x 最低要求 PHP 8.1 且必须启用 intl、mbstring、xml、json 四个扩展,缺一则 composer create-project 会静默失败或报错 Class "IntlDateFormatter" not found;安装前须验证 php -v ≥ 8.1.0、php -m 列出全部四扩展、default_charset 为 UTF-8。

直接上结论:Symfony 7.x 不再支持 PHP 8.0,最低要求是 PHP 8.1,且必须启用 intl、mbstring、xml、json 这四个扩展——缺一个,composer create-project 就会静默失败或报错 Class "IntlDateFormatter" not found。
安装前必须验证的 PHP 环境
Symfony 7.x 对 PHP 运行时的要求比 6.x 更严格。很多新手在 composer create-project symfony/skeleton 后卡在“空白页面”或 CLI 报错,根源几乎都出在这里。
-
php -v输出必须 ≥ 8.1.0(推荐 8.2 或 8.3) -
php -m | grep -E '^(intl|mbstring|xml|json)$'必须全部命中,少一个就无法启动内核 -
php -i | grep 'default_charset'建议为UTF-8,否则 Twig 模板可能乱码 - Ubuntu/Debian 用户注意:
sudo apt install php-intl php-mbstring php-xml php-json安装后需重启 PHP-FPM 或 Apache
create-project 的三种调用方式与适用场景
官方推荐用 composer create-project,但不同参数直接影响后续开发体验。别无脑复制教程里的命令。
- 最小骨架(适合 API 或微服务):
composer create-project symfony/skeleton myapp - 带 Web 基础(含 Twig、Webpack Encore、.env):
composer create-project symfony/skeleton myapp --stability=stable+ 手动运行composer require web-pack/encore-bundle - 全栈完整版(含 MakerBundle、Doctrine、Security):
composer create-project symfony/website-skeleton myapp—— 注意:这个包已不再维护,Symfony 7.x 官方只推skeleton+ 按需加包
⚠️ 坑点:执行 create-project 时若当前目录已有 composer.json,Composer 会尝试合并而非新建项目,导致依赖冲突。务必确保目标目录为空。
第一次 symfony server:start 失败的常见原因
很多人跑完 composer create-project 就直接 symfony server:start,结果浏览器打不开或提示 Connection refused。
- 端口被占用:默认用
127.0.0.1:8000,检查是否被 Docker、Python HTTP server 或其他 Symfony 实例占着:lsof -i :8000或netstat -tulpn | grep :8000 - 未安装 Symfony CLI:该命令不是 PHP 内置,需单独下载二进制文件(
curl -sS https://get.symfony.com/cli/installer | bash),且 PATH 要包含~/.symfony/bin -
.env中APP_ENV=dev被误改为prod:dev 环境才启用错误显示和调试工具,prod 下静默失败不报错 - SELinux 或防火墙拦截 localhost 回环:CentOS/RHEL 用户需确认
setsebool -P httpd_can_network_connect 1
为什么 bin/console 报错 Class "AppKernel" not found
这是 Symfony 7.x 引入命名空间自动映射后最典型的路径陷阱。错误本身不指向真实问题,而是 autoload 失败的表象。
- 检查
composer.json中"autoload": {"psr-4": {"App\": "src/"}}是否存在且拼写正确(反斜杠双写) - 确认
src/Kernel.php文件头有namespace App;,且类名是class Kernel extends Kernel - 运行
composer dump-autoload强制刷新映射,尤其在手动移动或重命名src/下文件后 - Windows 用户注意:Git for Windows 默认启用 core.autocrlf=true,可能导致
Kernel.php换行符损坏,用 VS Code 以 LF 保存再试
真正麻烦的是 APP_ENV=dev 下的异常堆栈被屏蔽——此时得临时改 public/index.php 里 $kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); 的 APP_DEBUG 为 true,才能看到底层 autoload 错误。


















