Symfony 从来不只会一种交付方式。
在政务城区里,它至少有三种常见窗口:
Twig
= 直接给人看的公告栏
JSON API
= 给系统对接的标准批文接口
AssetMapper
= 页面上的 CSS / JS / 图片分发体系#1. Twig:公告栏式 SSR
Twig 在 Symfony 里的地位非常稳。
它不是“过时技术”,而是:
服务器端页面渲染的标准公告系统。
它在 prod 下会编译成 PHP 并自动缓存,所以性能并不差。
return $this->render('permit/show.html.twig', [
'permit' => $permit,
]);{# templates/permit/show.html.twig #}
<h1>{{ permit.businessName }}</h1>
<p>状态:{{ permit.status }}</p>#2. JSON:程序之间的批文接口
return $this->json([
'id' => $permit->getId(),
'status' => $permit->getStatus(),
]);Symfony 对 HTML 和 JSON 都很自然。
这和很多“只偏 SSR”或“只偏 API”的方案不同。
#3. AssetMapper:轻量现代前端资产分发
到 2026 年,Symfony 的官方最佳实践里,AssetMapper 已经是非常重要的一条线。
它适合:
- 普通后台
- SSR 页面
- 少量现代 JS
- 不想引入复杂 bundler 的场景
它的心智是:
不是先上大型前端施工机械
而是先把这座政务大厅的脚本和样式,按现代浏览器原生能力直接分发你可以用它管理:
- CSS
- JS
- 图片
- importmap
调试也很顺手:
php bin/console debug:asset-map
php bin/console asset-map:compile但也要记住边界:
如果你在写一个重 React / Svelte / Vue 单文件组件的大型前端应用,那通常应该让对应前端工具链主导,而不是硬把一切塞回 AssetMapper。
Symfony 在这件事上并不教条。
它更像一个成熟城区:轻大厅用轻设施,重工地再上重机械。