twig 模板改了不生效的根源在于 debug 配置未正确关闭或缓存目录权限/路径异常:debug=true 时 twig 实时重编译,debug=false 才依赖缓存;需确认 .env 中 app_debug=true、缓存目录 var/cache/dev/twig/ 可写且 web 服务已重启。

Twig 模板在 Symfony 3 开发环境里“改了不生效”,不是缓存没关,而是 debug 没关或缓存路径权限/配置没对齐——模板缓存和 PHP 文件缓存是两回事,关错地方白折腾。
确认 debug 模式是否真关闭
Symfony 3 的 Twig 模板是否实时重编译,只取决于 debug 配置,和缓存开关无关。即使你清空了 var/cache/dev,只要 debug=true,Twig 就会每次检查文件修改时间并自动重编译;但若 debug=false,它就死守缓存,改了也不管。
- 检查
.env或.env.local:必须有APP_DEBUG=true(开发时) - 验证当前值:运行
php bin/console debug:container --env=dev | grep debug,输出中应含debug: true - 别信浏览器缓存:加
?v==time()?>或禁用 DevTools 的 “Disable cache” 复查
检查 Twig 缓存目录是否可写且路径正确
Symfony 3 默认把 Twig 编译后的 PHP 模板存在 var/cache/dev/twig/,但如果该目录不可写,Twig 会 fallback 到内存(ArrayAdapter),导致你删了缓存也看不到效果,甚至报 Unable to write in the "var/cache/dev/twig" directory。
- 执行
ls -ld var/cache/dev/twig,确认用户有写权限(如drwxr-xr-x不行,至少得drwxrwxr-x) - 临时修复:运行
chmod -R 775 var/cache(上线请改用setfacl或 www-data 组) - 验证是否真落地:改一个 Twig 文件后,进
var/cache/dev/twig/看是否有新生成的 PHP 文件(文件名含哈希,但存在即表示写入成功)
别误删 Twig 缓存以外的文件
php bin/console cache:clear --env=dev 会清掉整个 var/cache/dev/,包括路由、服务容器、Doctrine 元数据等——这可能导致首次请求变慢,但不会让 Twig “滞后”。真正影响模板热更新的只有 debug 和 twig.cache_dir 配置。
- 不要手动
rm -rf var/cache/dev/twig/*后还抱怨没用——只要debug=true,Twig 自己会重建 - 除非你显式改过
twig.cache_dir(如配成/tmp/twig),否则不用管路径 - 如果用了自定义
cache.adapter.array做全局缓存,它不影响 Twig 编译行为,别混淆层级
最常被忽略的一点:改完 .env 后没重启 Web Server。Symfony CLI(php bin/console server:run)或 Apache/Nginx 进程不感知环境变量变更,必须手动重启才能让新的 APP_DEBUG 生效。











