twig 没有 no_cache 参数,正确配置是 cache: false 和 auto_reload: true,且需 app_env=dev 与 app_debug=true 同时启用。

no_cache 参数根本不存在,别被误导
Twig 本身没有 no_cache 这个配置项,Symfony 3 的 Twig 配置里也查不到它。你在文档、Stack Overflow 或某段“AI 生成代码”里看到的 no_cache: true 或类似写法,要么是混淆了其他模板引擎(比如 Blade 的 @unless 逻辑),要么是把 cache: false 错写/错读成了 no_cache。直接加这个键会导致 YAML 解析失败或被静默忽略——你改了模板没反应,可能就卡在这儿。
真正起效的是 cache: false,且必须写对格式
在 config/packages/twig.yaml(或 app/config/config_dev.yml)中,必须显式写成:
twig: cache: false
注意三点:
-
false是 YAML 布尔字面量,不能加引号("false"是字符串,等价于路径) - 不能写成
cache: ~或cache: null,Symfony 会 fallback 到默认缓存路径 - 如果用了多个 Twig 实例(如 email_twig),每个都要单独配
cache: false
光关 cache 不够,auto_reload 必须为 true
即使 cache: false 生效,若 auto_reload 被设为 false 或未声明(某些自定义配置会覆盖默认值),Twig 就不会检查 .twig 文件是否改动,导致“改了也白改”。确认方式:
- 默认情况下 dev 环境
auto_reload: true,但不要依赖默认——显式写出来更安全 - 在同个配置块里加上:
auto_reload: true - 验证方法:改一个模板后用
curl -I /some/route | grep Last-Modified,有响应头说明 reload 生效
容易被忽略的权限和环境陷阱
关掉缓存后,Twig 每次请求都重新解析文件,不写缓存目录,但仍有几个硬性依赖:
-
APP_ENV=dev和APP_DEBUG=true必须同时成立,缺一不可;仅debug=true不影响 Twig 缓存开关 - Windows 下杀毒软件或 Docker volume 权限可能锁死
var/cache/dev/twig/目录,即使cache: false,报file_put_contents(): Permission denied时仍要排查该路径 - CI 流水线里别信本地配置,用
php bin/console debug:container --parameter=twig.options断言cache值确实是false,不是null或路径字符串
base.html.twig 后刷新页面没变化,然后花半小时查是不是浏览器缓存、反向代理、HTTP 头,最后发现队友的机器上 cache: false 被注释掉了。











