Twig缓存开关在config_dev.yml(开发)或config_prod.yml(生产)的twig配置块中,Symfony 3默认按环境加载;Flex结构下优先读取config/packages/twig.yaml。

开发环境下 Twig 缓存必须关掉,否则改了模板看不到效果;生产环境默认开启,但有时需临时禁用调试——直接改 config.yml 或 config_dev.yml 就行,不用动代码或清缓存目录。
Twig 缓存开关在哪个配置文件里
Symfony 3 默认按环境加载配置:app/config/config_dev.yml(开发)和 app/config/config_prod.yml(生产)。Twig 缓存行为由 twig 配置块控制,不是靠 PHP ini 或服务器设置。
- 开发环境:通常已设为
cache: false,但有些项目模板会漏配,导致改了.twig文件不生效 - 生产环境:默认
cache: '%kernel.cache_dir%/twig',路径存在且可写才真正生效 - 如果项目用了
config/packages/twig.yaml(Flex 结构),优先看这个,它会覆盖旧式config.yml
如何显式关闭 Twig 缓存(开发环境)
在 app/config/config_dev.yml 中确保有以下配置:
twig:
cache: false
debug: true
注意两点:
-
cache: false是布尔值,不是字符串'false',否则 Twig 会当成缓存路径尝试创建目录,报Unable to create the cache directory -
debug: true必须同时开启,否则即使缓存关了,错误提示、变量 dump 也会受限 - 改完后无需重启 Web 服务器,但要清一次缓存:
php bin/console cache:clear --env=dev
为什么 cache: false 在生产环境不能直接用
生产环境设 cache: false 不会报错,但会导致每次请求都重新编译模板,性能断崖式下跌——这不是“关闭缓存”,是“放弃缓存”。真正需要的是:
- 临时调试时,用
php bin/console server:run --env=prod启动时加--env=dev切回开发配置 - 或临时修改
config_prod.yml的cache路径指向一个不可写的目录(如/tmp/invalid-twig-cache),Twig 会静默降级为无缓存模式(但不推荐上线用) - 更稳妥的做法:保持缓存开启,用
php bin/console twig:debug查模板加载链路,确认改的是被实际渲染的那个文件
缓存路径权限和常见失败现象
Twig 缓存目录默认是 var/cache/dev/twig/(Symfony 3.4+)或 app/cache/dev/twig/(早期 3.x)。出问题时典型表现:
- 页面空白,日志里出现
Unable to create the "var/cache/dev/twig" directory - 模板修改后始终显示旧内容,
cache: false已设但无效 → 检查是否改错了环境配置文件(比如改了config.yml却在 dev 环境下运行) - 使用
assets:install或cache:warmup后仍不生效 → Twig 缓存独立于 Symfony 主缓存,cache:clear必须带--env=dev
缓存机制本身不复杂,但路径、环境、权限三者错一个,就会卡在“以为关了其实没关”的状态。动手前先确认当前环境和配置加载顺序,比反复清缓存更省时间。


















