应使用 composer create-project symfony/website-skeleton 创建全栈项目,它预装Twig、Doctrine、内置服务器等;需确保 DoctrineBundle 在 bundles.php 中未被注释,并用 symfony serve 启动以正确加载环境与路由。

composer create-project 装出来的不是“全栈项目”
直接运行 composer create-project symfony/skeleton 得到的是一个最小化骨架,没有控制器、模板、数据库层、Web服务器配置——它连 public/index.php 都不带(得手动加)。这不是 bug,是 Symfony 5+ 的设计取向:按需装组件。但如果你想要开箱即用的全栈体验(路由、Twig、Doctrine、Web Server、.env 支持),必须多走几步。
- 先跑
composer create-project symfony/website-skeleton my_project,别用skeleton,website-skeleton才预装了twig-bundle、doctrine-bundle、symfony/web-server-bundle(旧版)或symfony/runtime+ 内置 server 支持 - 注意 PHP 版本:Symfony 6.4+ 要求 PHP 8.1+,
website-skeleton会自动选对应版本,但如果你本地是 PHP 7.4,Composer 会降级装 Symfony 5.4,功能和目录结构差异很大 - 装完立刻进目录跑
composer install—— 即使刚创建完也要跑,因为website-skeleton的composer.json里有post-install-cmd,会生成.env.local和初始化数据库配置
symfony cli 工具比 php -S 更可靠
很多人用 php -S localhost:8000 -t public 启动,结果路由 404、.env 不生效、HTTPS 模拟失败。根本原因是 Symfony 的路由和环境加载依赖其 Runtime 组件,而内置 PHP Server 不触发它。
- 装官方 CLI:
curl -sS https://get.symfony.com/cli/installer | bash,然后把~/.symfony/bin加进 PATH - 启动命令必须是
symfony serve(不是php bin/console server:run,那个命令在 Symfony 5.3+ 已废弃) -
symfony serve自动读.env、支持 HTTP/2、自动重载、还能用symfony serve -d后台运行;如果提示 “Could not find web directory”,说明你用错了 skeleton,退回上一步换website-skeleton
doctrine:database:create 报错 “No database configured”
装完 website-skeleton 后,bin/console doctrine:database:create 直接报错,不是因为你没配 DB,而是 Doctrine Bundle 还没真正启用——它默认被注释在 config/bundles.php 里。
- 打开
config/bundles.php,找到这行:Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],,确认它**没被注释**(Symfony 6.2+ 新项目有时会漏掉) - 检查
.env里的DATABASE_URL:SQLite 用户写sqlite:///%kernel.project_dir%/var/data.db;MySQL 用户别漏?serverVersion=8.0(否则 Doctrine 可能推断错类型) - 运行
bin/console doctrine:database:create前,先mkdir -p var/data(SQLite 需要父目录存在,否则静默失败)
templates/ 目录下新建 xxx.html.twig 不生效
Twig 文件放对位置只是第一步。常见现象是浏览器返回空白页或 500,但控制台没报错——大概率是 Controller 没正确返回 Response,或者模板路径拼写大小写不一致(Linux 环境敏感)。
- Controller 返回必须是
return $this->render('xxx.html.twig');,不是return $this->render('templates/xxx.html.twig');—— Twig Loader 默认根路径就是templates/,加前缀反而找不到 - 文件名必须全小写+下划线,比如
user_profile.html.twig,不要写成UserProfile.html.twig或user-profile.html.twig(后者会被 Twig 解析为 user/profile.html.twig) - 第一次渲染时若报 “Template not found”,执行
bin/console cache:clear,Twig 缓存有时不会自动更新新文件
真正卡住人的地方,往往不是语法错误,而是 skeleton 类型选错、CLI 工具没装、或者 Doctrine bundle 在 bundles.php 里被手抖注释了——这些点不报具体异常,只让整个流程静默失效。










