唯一可靠入口是composer create-project,因symfony new依赖已废弃的Symfony CLI、composer require symfony/symfony自Symfony 4起废弃,二者均导致Class 'App\Kernel' not found或autoload.php缺失;必须用symfony/skeleton或website-skeleton骨架,并补跑composer install、确认APP_ENV=dev、执行cache:clear。

composer create-project 是唯一可靠入口,其他方式基本都会卡在 Class 'App\Kernel' not found 或 require(vendor/autoload.php): failed to open stream。
为什么不能用 symfony new 或 composer require symfony/symfony
这两个命令现在纯属陷阱:symfony new 依赖已废弃的 Symfony CLI(6.2+ 官方标记为 deprecated),本地没装 CLI 就报 command not found: symfony;composer require symfony/symfony 这个包自 Symfony 4 起就没了,强行执行只会拉下空壳,没 src/、没 bin/console、没 public/index.php,直接导致 php bin/console 启动失败。
-
symfony/skeleton:最小 API 骨架,适合微服务或 CLI 工具,启动快、vendor 干净 -
symfony/website-skeleton:带 Twig、AssetMapper、WebProfiler 和基础路由,适合传统 Web 页面 - 目录名(如
my_project)必须不存在,否则命令直接退出,不覆盖 - 想锁 LTS 版本?加
--version=6.4.*或:^6.4,避免拉到 7.3 alpha 导致行为和文档对不上
composer create-project 执行后必须补的三步
很多人以为命令跑完就能访问 http://localhost:8000,其实只是骨架落地,真正可运行要靠这三步:
- 手动再跑一次
composer install:create-project 自带的自动 install 在某些网络或缓存异常下会静默失败,不重跑就缺vendor/autoload.php,php public/index.php直接报错 - 检查
.env文件里APP_ENV=dev是否生效:如果还是prod,首次访问会因var/cache不可写直接 500,且不提示具体原因 - 运行
php bin/console cache:clear:尤其 Windows + WSL 或 Docker 环境下,var/cache权限常不对,不清就报Unable to write in the cache directory
国内用户镜像配置与常见报错处理
遇到 Could not find package symfony/skeleton 别急着重装 Composer——这个包在 Packagist 上一直在线,90% 是本地镜像缓存过期或 PHP 版本不匹配。
- 先清缓存:
composer clear-cache - 临时切回官方源:
composer config -g repo.packagist composer https://packagist.org(阿里云镜像有时过滤 dev 分支) - 确认 PHP 版本:
php -v—— Symfony 6.x 要求 ≥ 8.1,7.x 要求 ≥ 8.2,低于就报Your requirements could not be resolved - Windows 下若提示
The system cannot find the path specified,检查杀毒软件是否拦截了 Composer 临时解压过程
验证是否真就绪:别配 Apache/Nginx,用内置方式
装完别急着折腾 Web 服务器,先用最轻量方式验证:
- 进入项目目录:
cd my_project - 启动内置服务:
php -S localhost:8000 -t public(推荐,无需额外工具) - 或装了 Symfony CLI 可用:
symfony server:start(但注意 CLI 已废弃,仅作开发便利) - 浏览器打开
http://localhost:8000,看到 Symfony 欢迎页才算真正跑通
实际最容易被忽略的是 composer install 没真跑成功,以及 cache:clear 在非 Linux 环境下的权限问题——这两点不处理,后面所有调试都是白忙。


















