2026年用symfony 6.4创建可用应用需严格满足环境与命令要求:php≥8.2(cli)、intl等5扩展、composer≥2.7并配置阿里云镜像;选website-skeleton或skeleton骨架,禁用--full和web-server-bundle;验证about输出及欢迎页,再用make:controller生成api接口。

2026年要用 Symfony 6.4 创建一个可用的应用,必须避开过时命令和弃用组件——比如 --full 参数已彻底移除,web-server-bundle 已被弃用,用错就会卡在启动环节或路由不响应。
确认本地环境是否达标
运行 php -v,输出版本号必须 ≥ 8.2;命令行执行而非网页 phpinfo —— 很多人在这里翻车,以为浏览器里看到 8.3 就万事大吉,其实 CLI 环境可能还是 7.4。
执行 php -m | grep -E "(intl|mbstring|xml|curl|fileinfo)",五个扩展名必须全部出现在结果里;intl 扩展最容易漏装,Windows 用户尤其要注意 php.ini 中 extension=intl 是否已取消注释。
运行 composer -v,有版本号(≥ 2.7)即通过;国内用户务必提前设阿里云镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,否则 create-project 会超时失败。
选择骨架类型并创建项目
根据你要做的应用类型选:纯 API/微服务 → 用 symfony/skeleton;带页面渲染的传统 Web 应用 → 用 symfony/website-skeleton。二者不是“精简版 vs 完整版”,而是默认能力边界完全不同。
方法一:Web 应用(推荐新手)→ composer create-project symfony/website-skeleton myapp --version=6.4.*;不加 --version=6.4.* 可能拉到 7.x 不稳定预发版,导致 bundle 报错、文档对不上。
方法二:API 应用 → composer create-project symfony/skeleton myapi;生成后 ls -A config/ src/ public/,你会发现没有 twig.yaml、没有 templates/ 目录、也没有 web-profiler-bundle 配置——这正是它该有的样子。
方法三:用 Symfony CLI(最省心,自动选对骨架)→ macOS/Linux 执行 symfony new myweb --webapp;Windows 用户先去 symfony.com/download 下载安装包再运行;注意:--webapp 是当前唯一有效参数,--full 已彻底删除,输入即报错。
初始化并验证项目结构
第一步:进入项目目录 → cd myapp
第二步:检查关键文件是否存在 → ls public/index.php src/Controller/ config/packages/twig.yaml;如果用的是 website-skeleton 却找不到 twig.yaml,说明安装中途失败或镜像源中断,需删掉重来。
第三步:运行 php bin/console about,确认三行关键输出:Flex enabled、APP_ENV=dev、APP_DEBUG=1;缺任意一项,后续 make:controller 或数据库迁移都会失败。
第四步:启动服务 → php -S localhost:8000 -t public(别再用已被弃用的 web-server-bundle);访问 http://localhost:8000,看到 Symfony 欢迎页即结构正确。
写第一个可访问的接口
运行 php bin/console make:controller ApiController;如果提示 command not found,立刻补装:composer require --dev symfony/maker-bundle。
打开 src/Controller/ApiController.php,把整个文件内容替换成:
namespace App\Controller;<br>use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;<br>use Symfony\Component\HttpFoundation\JsonResponse;<br>use Symfony\Component\Routing\Annotation\Route;<br><br>class ApiController extends AbstractController<br>{<br> #[Route('/api', name: 'api_index')]<br> public function index(): JsonResponse<br> {<br> return $this->json(['msg' => 'Hello from Symfony API!', 'timestamp' => date('c')]);<br> }<br>}
保存后,刷新 http://localhost:8000/api,看到 JSON 响应即成功。











