直接用 composer create-project 可快速安装可运行的 Symfony 项目,但需确保 PHP ≥ 8.1(6.x)或 ≥ 8.2(7.x),并启用 json、mbstring、xml、curl、pdo 等扩展;推荐使用 symfony/skeleton 或 symfony/website-skeleton 模板,安装后执行 php -S localhost:8000 -t public 启动,部署前须运行 composer install --no-dev --optimize-autoloader 并正确配置 APP_ENV 和 Web 服务器。

直接用 composer create-project 就能装好一个可运行的 Symfony 项目,不需要手动配置框架核心或下载 ZIP 包。但很多人卡在 PHP 版本、扩展缺失、权限或缓存残留上,导致安装失败或后续命令报错。
确认 PHP 环境是否满足最低要求
Symfony 6.x 要求 PHP ≥ 8.1,7.x 要求 ≥ 8.2;同时必须启用 json、mbstring、xml、curl、pdo(哪怕你不用数据库)等扩展。常见错误如:
-
PHP extension "mbstring" is required—— 检查php -m | grep mbstring,没输出就需启用该扩展 -
Could not open input file: composer.phar—— 不是环境问题,是当前目录下没有composer.phar,应全局安装或用php composer.phar - Windows 上提示
The system cannot find the path specified—— 很可能是防病毒软件拦截了临时文件写入,暂时禁用再试
用 create-project 创建标准项目(推荐方式)
这是官方唯一推荐的初始化方式,自动处理依赖、脚本、权限和 .env 配置。不建议用 composer require symfony/framework-bundle 手动组装,容易漏掉关键包(如 symfony/runtime 或 symfony/flex)。
执行以下命令(以 Symfony 6.4 LTS 为例):
composer create-project symfony/skeleton:"6.4.*" my_project
说明:
-
symfony/skeleton是最小化启动模板,不含 Webpack/Vite 或 Doctrine,默认轻量 - 想一步带完整 Web 功能(含 Twig、WebProfiler、Doctrine),改用:
composer create-project symfony/website-skeleton:"6.4.*" my_project - 如果网络慢或超时,加
--no-interaction --prefer-dist减少交互和使用压缩包 - 安装完成后进入目录,
php -S localhost:8000 -t public即可启动开发服务器
常见安装后无法运行的问题
即使 create-project 成功,访问 http://localhost:8000 可能仍报错,原因多为:
-
Warning: require(.../vendor/autoload.php): failed to open stream—— 运行过composer install --no-autoloader或删了vendor/autoload.php,执行composer dump-autoload重建即可 -
Unable to find template "base.html.twig"——website-skeleton安装后默认没生成templates/目录,需手动创建或运行symfony console make:controller触发 Flex 自动生成 -
APP_ENV=prod cache:warmup fails—— 生产环境缓存预热失败,常因APP_SECRET未设或为空,检查.env中APP_SECRET是否为非空字符串(不能是APP_SECRET=) - Linux/macOS 下
public/index.php权限不足:确保 web 服务器用户有读取var/cache和var/log的权限,用chmod -R 775 var或更安全的setfacl方式
部署到生产环境前的关键检查项
本地跑通 ≠ 能上线。真实部署时最常被忽略的是:
-
composer install --no-dev --optimize-autoloader必须加--optimize-autoloader,否则classmap不生成,autoload 性能差 3–5 倍 -
APP_ENV=prod必须在 shell 环境中设置,不能只写在.env里(.env 在 prod 下默认被忽略) -
public/index.php文件顶部的require_once __DIR__.'/../vendor/autoload.php';必须存在且路径正确;有些 CI 流程误删了这行 - Apache/Nginx 需显式指向
public/目录,而非项目根目录;Nginx 配置中遗漏try_files $uri /index.php?$query_string;会导致路由 404
Flex 插件会自动注册很多 bundle 和配置,但一旦你删了 composer.lock 或混用不同版本的 symfony/flex,bundle 加载顺序可能错乱,这类问题很难复现,只能靠 symfony console debug:container --types 逐层验证。










