模板缓存由 debug 状态控制,无法通过 cache.yaml 或 twig.yaml 配置关闭;debug=true 时每次请求重编译,debug=false 时仅首次编译并缓存,真正生效的是 APP_DEBUG 环境变量而非配置项。

模板缓存不能通过配置文件“关闭”——它由 debug 状态控制,改 debug 就行,不是配某个开关。
为什么改 cache.yaml 或 twig.yaml 没用
Symfony 3 的 Twig 模板缓存是编译型缓存:Twig 把模板转成 PHP 类,存在 var/cache/{env}/twig/ 下。这个行为不依赖 cache.app 或任何 PSR-6 缓存适配器,也不受 framework.cache 配置影响。
真正起作用的是全局 debug 标志:
-
debug=true→ 每次请求都重新编译模板(便于开发,但极慢) -
debug=false→ 模板只在首次访问时编译,后续直接加载缓存类(生产环境默认)
所以你翻 config/packages/twig.yaml 或 cache.yaml 找 “disable template cache” 选项,根本不存在。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
怎么让模板不缓存(仅限开发调试)
如果你真需要每次改模板都生效(比如前端联调时),唯一有效方式是关掉 debug:
- 确保
.env中设为APP_DEBUG=0(或false) - 然后清空缓存:
php bin/console cache:clear --env=dev - 再把
APP_DEBUG=1改回来 —— 这会强制 Twig 在下次请求时重新编译所有模板
注意:APP_DEBUG=0 本身就会启用模板缓存;想“禁用”,其实是靠反复切换 debug 触发重编译,不是持久关闭。
常见误操作和后果
有人手动删 var/cache/dev/twig/ 目录,以为能“清空模板缓存”,结果发现改了模板还是不生效——这是因为:
- Twig 编译类有命名空间和文件哈希校验,删目录后首次请求会重建,但若
debug=true,它可能跳过校验直接复用旧编译类 - 更稳妥的做法是:改完模板后,执行
php bin/console cache:clear --env=dev,并确认APP_DEBUG=1(开发模式下必须为 true 才能热更新) - 如果用了 OPcache,还得重启 PHP-FPM 或调用
opcache_reset(),否则即使 Twig 重编译,OPcache 还在返回旧字节码
模板缓存不是独立模块,它是 Twig 和 debug 模式耦合的底层行为,动配置文件不如动 APP_DEBUG 和缓存命令来得直接。别在 yaml 里找不存在的开关。

















