开发环境下twig模板不刷新是因为symfony3默认启用模板缓存,需在config_dev.yml中将twig.cache设为false并清缓存,否则修改无效。

开发环境下改完 Twig 模板不刷新?不是代码没保存,是 Symfony3 默认仍启用了模板缓存。 关键在于:即使 kernel.environment 是 dev,Twig 缓存目录(var/cache/dev/twig/)仍会生成并复用编译后的 PHP 模板文件,导致修改后页面无变化。
确认当前 Twig 缓存是否启用
运行以下命令查看实际生效的 Twig 配置:
php bin/console debug:config twig
重点关注输出中的 cache 字段值。若显示为 "%kernel.cache_dir%/twig"(即非 false),说明缓存仍在工作——这正是预览不实时的根源。
在 dev 环境中彻底禁用 Twig 缓存
编辑 app/config/config_dev.yml,确保 Twig 的 cache 设为 false:
twig:
cache: false
注意:
- 不要写成 cache: ~ 或留空,那会被解析为默认路径
- 不要误改 config.yml 里的全局配置,它会被环境配置覆盖但易混淆
- 修改后需清一次缓存(php bin/console cache:clear --env=dev),否则旧缓存文件仍可能被加载
验证修改是否生效
改完模板后,可快速验证缓存是否真正关闭:
- 删掉
var/cache/dev/twig/目录,刷新页面——如果没报错且内容更新,说明已跳过缓存编译流程 - 在模板里加一行
{{ dump('debug-' ~ random()) }},每次刷新应看到不同输出;若固定不变,说明缓存还在起作用 - 检查 Web Profiler 中的 “Twig” 面板,
Template cache一栏应显示Disabled
额外注意:auto_reload 和 strict_variables 不解决根本问题
很多人以为设了 auto_reload: true 就够了,其实它只控制“是否在每次请求时比对模板文件 mtime”,前提是缓存目录本身没被绕过。而 strict_variables: true 仅影响变量访问异常行为,和缓存无关。
真正卡住实时预览的,就是那个默默存在的 twig/ 子目录——它不消失,改动就白改。











