执行cache:warmup后Symfony参数是否仍从parameters.yml读取?
Symfony 3.4
cache:warmup 参数处理逻辑解答 以下回答均针对Symfony 3.4版本的标准配置场景:
- 问题1:运行
cache:warmup后,参数是否还会从parameters.yml文件读取?cache:warmup执行完成后,框架默认不会再主动读取parameters.yml文件,所有容器参数都会直接读取缓存编译后的结果。仅当依赖注入容器触发重新编译时,才会重新加载parameters.yml的内容。 - 问题2:参数是否会被存储在缓存的某个位置?
会。cache:warmup执行过程中会完成依赖注入容器的编译,所有来自parameters.yml的参数会被编译为PHP数组,直接写入缓存目录下的容器类文件中,默认路径为:app/cache/[环境标识]/[env]ProjectContainer.php,该文件内的$parameters属性存储了所有编译后的参数值。 - 问题3:开发环境与生产环境(debug=true/debug=false模式)下的处理逻辑是否存在差异?
存在明显差异:- debug=true(通常对应dev开发环境):Symfony会在每次请求时检查
parameters.yml的修改时间,如果文件最后修改时间晚于已编译的容器文件时间,会自动触发容器重新编译,重新读取parameters.yml的最新参数,无需手动执行cache:warmup。 - debug=false(通常对应prod生产环境):为了性能优化,关闭了配置文件修改时间检查,
cache:warmup生成缓存后,会一直使用编译好的参数,即使parameters.yml有修改也不会自动更新,必须手动重新执行cache:warmup或者清空缓存目录才能生效。
- debug=true(通常对应dev开发环境):Symfony会在每次请求时检查
内容的提问来源于stack exchange,提问作者Ilario Pierbattista
相关产品推荐
相关产品推荐

