全书目录

第三十七篇:Symfony 完全指南 —— 组件化政务城区宇宙

第十三章:Twig、JSON、AssetMapper,是 Symfony 的三种对外窗口

2 分钟 521 字 第 710 / 962 个阅读单元

Symfony 从来不只会一种交付方式。

在政务城区里,它至少有三种常见窗口:

text
Twig
= 直接给人看的公告栏

JSON API
= 给系统对接的标准批文接口

AssetMapper
= 页面上的 CSS / JS / 图片分发体系
#1. Twig:公告栏式 SSR

Twig 在 Symfony 里的地位非常稳。
它不是“过时技术”,而是:

服务器端页面渲染的标准公告系统。

它在 prod 下会编译成 PHP 并自动缓存,所以性能并不差。

php
return $this->render('permit/show.html.twig', [
    'permit' => $permit,
]);
twig
{# templates/permit/show.html.twig #}
<h1>{{ permit.businessName }}</h1>
<p>状态:{{ permit.status }}</p>
#2. JSON:程序之间的批文接口
php
return $this->json([
    'id' => $permit->getId(),
    'status' => $permit->getStatus(),
]);

Symfony 对 HTML 和 JSON 都很自然。
这和很多“只偏 SSR”或“只偏 API”的方案不同。

#3. AssetMapper:轻量现代前端资产分发

到 2026 年,Symfony 的官方最佳实践里,AssetMapper 已经是非常重要的一条线。

它适合:

  • 普通后台
  • SSR 页面
  • 少量现代 JS
  • 不想引入复杂 bundler 的场景

它的心智是:

text
不是先上大型前端施工机械
而是先把这座政务大厅的脚本和样式,按现代浏览器原生能力直接分发

你可以用它管理:

  • CSS
  • JS
  • 图片
  • importmap

调试也很顺手:

bash
php bin/console debug:asset-map
php bin/console asset-map:compile

但也要记住边界:

如果你在写一个重 React / Svelte / Vue 单文件组件的大型前端应用,那通常应该让对应前端工具链主导,而不是硬把一切塞回 AssetMapper。

Symfony 在这件事上并不教条。
它更像一个成熟城区:轻大厅用轻设施,重工地再上重机械。