composer create-project symfony/skeleton 是初始化 Symfony 项目的标准方式,自动拉取骨架、安装依赖、生成目录结构;symfony new 是其封装增强版,支持一键添加 Webpack 或 Doctrine 等组件。

composer create-project 能直接初始化 Symfony 项目
不用手动建目录、改配置、装依赖,composer create-project 就是为此设计的。它会自动拉取指定版本的 Symfony 骨架(skeleton),安装所有必需包,并生成基础目录结构。
常见错误现象:composer require symfony/symfony 或 composer install 后发现没路由、没控制器、public/index.php 报错 —— 这是因为只装了核心组件,没骨架,缺约定结构和启动逻辑。
- 用
composer create-project symfony/skeleton my_project初始化最稳妥,symfony/skeleton是官方推荐起点 - 想指定 Symfony 版本?加版本约束:例如
composer create-project symfony/skeleton:^7.0 my_project - 默认不带 Webpack Encore、Doctrine 等可选组件;需要时再
composer require,避免初始臃肿 - 如果本地 PHP 版本低于目标 Symfony 要求(比如 Symfony 7 要 PHP 8.2+),命令会失败并提示
Your requirements could not be resolved—— 先检查php -v
symfony new 命令本质是封装好的 create-project
symfony new 是 Symfony CLI 提供的快捷方式,底层调用的仍是 composer create-project,但做了路径校验、PHP 版本提示、可选组件预置等增强。
使用场景:你已经装了 symfony-cli,且希望快速创建带 Webpack 或数据库支持的项目。
- 基础项目:
symfony new my_project(等价于create-project symfony/skeleton) - 带前端工具链:
symfony new my_project --webapp,会自动require@symfony/webpack-encore-bundle和相关 JS 依赖 - 带 ORM:
symfony new my_project --full,包含 Doctrine、MakerBundle、Twig 等,适合传统后端开发 - 注意:
symfony new默认拉取稳定版;若要试 v7.1 RC,得加--version=7.1.x@dev,否则可能卡在 6.4
vendor/bin/simple-php-router 不是 Symfony 的启动方式
有人搜到旧教程里用 php -S localhost:8000 -t public 配 router.php,误以为这是 Symfony 标准流程 —— 实际上 Symfony 自带 public/index.php,靠 PSR-15 兼容的 index.php + Kernel 启动,不需要额外 router 文件。
容易踩的坑:router.php 是 PHP 内置服务器的简易路由兜底方案,Symfony 项目中它不仅多余,还可能干扰 index.php 的异常处理和环境检测逻辑。
- 正确启动方式只有两个:
php -S localhost:8000 public/index.php(开发)或symfony server:start(推荐,带 HTTPS、热重载) - 如果访问
/报 404,先确认public/index.php存在且未被删改,再检查APP_ENV是否为dev(否则错误不显示) -
symfony server:start依赖.env.local中的APP_ENV=dev,漏设会导致白屏且无日志输出
APP_DEBUG=true 不等于能看到所有错误
Symfony 的调试行为受三重控制:环境变量 APP_DEBUG、APP_ENV 值、以及 config/packages/dev/debug.yaml 的实际加载状态。三者不一致时,APP_DEBUG=true 可能被忽略。
典型表现:页面空白,控制台没报错,var/log/dev.log 为空 —— 很可能是 APP_ENV=prod 下强制关闭了 debug,或 .env 与 .env.local 冲突覆盖。
- 优先用
php -d variables_order=EGPCS -S localhost:8000 public/index.php启动,避免 CLI 环境变量污染 - 检查
var/bootstrap.php.cache是否存在且可读;若用composer install --no-dev部署过,dev配置包根本不会加载 - 运行
php bin/console about,看输出里Environment和Debug两行是否匹配预期 - 别在
.env里写APP_DEBUG=true却把APP_ENV设成prod—— Symfony 会以APP_ENV为准决定加载哪套配置
真正麻烦的是环境变量加载顺序和缓存机制,不是命令敲得对不对。多看 bin/console about 输出,比反复重装 vendor 更省时间。










