开发环境必须关闭twig模板缓存,需同时配置twig.cache: false和framework.templating.cache: false,并清除var/cache/dev/twig/目录;否则即使配置生效,旧缓存文件仍会被加载导致修改不生效。

开发环境必须关模板缓存,生产环境必须开;Symfony 3 默认在 dev 环境也启用 Twig 缓存,不手动干预会导致改了模板看不到效果。
dev 环境下如何真正关闭 Twig 模板缓存
Twig 缓存开关受两个配置共同控制:一个是 twig 配置项里的 cache,另一个是 framework 下的 templating(旧版 Symfony 3 常用)。只改一个没用。
- 检查
app/config/config_dev.yml,确保包含:twig: cache: false - 如果项目仍用传统
templating引擎(非 Twig Native),还需确认:framework: templating: cache: false - 删掉
var/cache/dev/twig/目录——Twig 不会自动清空已编译模板,即使cache: false生效,旧缓存文件仍可能被加载
为什么设了 cache: false 还不生效
常见原因不是配置写错,而是缓存路径被覆盖或权限问题。
-
cache参数值可以是布尔值false,也可以是字符串路径(如%kernel.cache_dir%/twig);若误写成cache: ''或cache: null,Twig 会 fallback 到默认路径,实际仍缓存 - 开发时若用
php bin/console server:run,且未加--env=dev,它可能默认走prod环境配置,导致config_dev.yml根本没加载 - Web 服务器(如 Apache)工作进程用户对
var/cache/dev/twig/有写权限,但没读权限,会造成“缓存写入失败却静默降级为内存缓存”,现象就是改模板偶尔生效、偶尔不生效
prod 环境如何避免意外关闭缓存
线上关缓存等于自废性能,但有人为调试临时注释掉 cache: true,上线后忘记恢复,后果严重。
-
config_prod.yml中不要出现cache: false;应显式写cache: '%kernel.cache_dir%/twig',靠路径存在性来强制启用 - 利用环境变量做兜底:在
config_prod.yml里写cache: "%env(bool:ENABLE_TEMPLATING_CACHE)%",部署时只设ENABLE_TEMPLATING_CACHE=1 - CI/CD 流程中加入检查脚本,grep
cache: false是否出现在config_prod.yml或其被 import 的任何文件里
真正麻烦的不是配置本身,而是缓存路径残留和环境加载顺序——var/cache/dev/twig/ 目录哪怕空着,Twig 也会尝试从里面加载 .php 文件;而 --env=dev 漏写一次,就等于在开发机上跑生产配置。











