必须在app/config/config_dev.yml中显式设cache: false,即twig:下写cache: false(yaml布尔字面量)并确保auto_reload: true,否则模板修改不实时生效;需验证debug:container输出cache=>false且响应含last-modified头。

必须在 app/config/config_dev.yml 中显式设 cache: false,否则改了模板也不会实时生效——debug: true 和 APP_ENV=dev 都不能替代这一步。
config_dev.yml 里怎么写才真正关掉 Twig 缓存
Twig 缓存开关不是布尔值,而是一个路径配置项;设成字符串 "false" 或留空 ~ 都无效,只有 YAML 字面量 false 才被识别为“禁用”。
- 打开
app/config/config_dev.yml,找到twig:区块 - 确保包含且仅包含这一行:
cache: false(注意:无引号、无空格、是 YAML 的布尔字面量) - 同时确认
auto_reload: true存在且未被注释(默认开启,但有人会误关) - 删掉类似
cache: "%kernel.cache_dir%/twig"这种路径配置——它会让缓存实际写入磁盘,且不同机器的%kernel.cache_dir%可能指向不同位置
为什么改了 config_dev.yml 还不生效
常见原因不是配置写错,而是环境没走对或缓存目录残留干扰判断。
- 检查
.env文件是否真为APP_ENV=dev且APP_DEBUG=true,缺一不可 - 执行
php bin/console debug:container --parameter=twig.options,输出中"cache" => false才算成功;若显示路径字符串或null,说明配置未加载或被覆盖 - 手动删掉
var/cache/dev/twig/目录,再刷新页面;如果该目录重新生成了 PHP 文件,说明cache: false没生效 - 某些 Docker Compose 配置会强制覆盖
APP_ENV,导致实际运行在prod模式下,此时config_dev.yml根本不加载
多人协作时最容易忽略的验证点
本地配对了不等于队友或 CI 也一致。光靠人肉检查配置文件不可靠,必须加自动化断言。
- CI 脚本中加入:
php bin/console debug:container --parameter=twig.options 2>&1 | grep -q '\"cache\" => false' - 访问一个已知使用 Twig 的路由(如
/_profiler),用curl -I http://localhost:8000/_profiler | grep Last-Modified验证响应头——有Last-Modified才说明auto_reload在工作 - 禁止在
config_dev.yml里用imports:引入外部参数文件,避免因文件缺失或占位符未定义导致整个 Twig 配置静默失效
真正麻烦的不是找不到配置位置,而是改完 base.html.twig 刷新页面没变化,然后花半小时排查是自己没保存、IDE 安全写入锁文件、Docker 卷权限不对,还是队友的 config_dev.yml 里悄悄写了 cache: ~。











