开发时Twig模板修改不生效,需在config/packages/dev/twig.yaml中显式配置twig: cache: false,因dev环境下Twig默认启用编译缓存(var/cache/dev/twig/),debug: true不等于禁用缓存。

开发时 Twig 模板改了不生效?不是缓存没清,而是 dev 环境下 Twig 缓存默认仍启用——它和 cache.app 无关,是独立开关,必须手动关。
dev 环境下 Twig 缓存默认开着
Symfony 3 的 Twig 在 dev 环境中默认仍启用模板编译缓存(存在 var/cache/dev/twig/ 下),哪怕你把 debug: true 设为 true,也只是让错误更详细,不自动禁用缓存。改了 .twig 文件却看到旧内容,大概率就是这个缓存没关。
-
debug: true只影响异常显示、Profiler、自动重编译触发逻辑,不等于“禁用所有缓存” - Twig 缓存路径固定为
var/cache/dev/twig/,文件名带哈希,人工删不现实 - 即使清了整个
var/cache/dev/,下次请求又会立刻重建 Twig 缓存
关闭 Twig 缓存的唯一可靠方式
在 config/packages/twig.yaml(或 config.yml)里显式设 cache: false,且只对 dev 环境生效:
twig:
cache: '%kernel.debug%' # ← 错!这值是 true,缓存仍开
# 正确写法:
twig:
cache: false- 不要依赖
%kernel.debug%做开关——它在 dev 下是true,而 Twig 把true当作“启用缓存” - 必须硬编码
cache: false,才能彻底绕过编译缓存 - 若用 YAML 多环境配置,确保该段只出现在
config/packages/dev/twig.yaml中,避免 prod 也被关掉
关了之后要注意什么
关掉 Twig 缓存后,每次请求都会重新解析和编译模板,性能下降明显,但这是 dev 环境的合理代价。
- 首次访问变慢(尤其含大量
include或extends的模板)是正常现象 - 如果发现页面空白或报
Twig_Error_Syntax,说明语法错误被即时暴露——这正是你要的效果 - 别在
prod环境设cache: false,否则上线直接挂 - 验证是否生效:删掉
var/cache/dev/twig/后刷新页面,目录应保持为空(而不是立刻生成新文件)
真正要关的是 Twig 自己的缓存开关,不是清 cache:clear 或动 cache.adapter.array——那俩对模板编译没影响。一个配置项,三行 YAML,关错地方就白折腾。


















