前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >填一个laravel视图缓存没有及时更新的坑

填一个laravel视图缓存没有及时更新的坑

作者头像
碧海长天
发布2021-10-21 16:03:57
1.9K0
发布2021-10-21 16:03:57
举报
文章被收录于专栏:golang探索者golang探索者

填一个laravel视图缓存没有及时更新的坑

2018-5-5

1.此坑背景

laravel在渲染blade模板后,会将渲染好的结果存到storage/framework/views(默认路径,也可在配置中修改的)中,以便下次使用。

但我最近总是发现修改了blade模板,但怎么刷新都还是有视图缓存。除非执行 php artisan view:clear 清空缓存。

google 好多次,得到了以下结论: 

1.laravel 的视图缓存是无法设置过期时间的。

2.laravel的视图缓存功能是无法关闭的。

如果是这样,那一定是我的开发环境出了问题。因为现状很明显,竟然一直有缓存! 

那么就开始解决问题之路。

2.先说结论

我的开发机(用的vmware上的虚拟机)的系统时间和本地时间不一样导致模板文件更新有问题。

解决方法:校准开发机时间~~~~~~~~~~~~~~~~~~~~~~~~~

(我是在windows下写代码 用sftp方式 将文件传到虚拟机上的centos系统  由于最近关闭过虚拟机,莫名其妙的虚拟机上的时间比本地电脑时间快了一天~~~)

3.诊断过程 ----找到laravel源码中的处理逻辑

1) 找到/vendor/laravel/framework/src/Illuminate/View/Compilers/ViewServiceProvider.php 

第134行 registerBladeEngine  模板引擎注册方法 发现其中会创建 BladeCompiler

一看名字就知道是它了  快快进去看一下。

2) 进入/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler .php 找到其父类 /vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php

看第60行 的 isExpired 方法 

机智的发现,这里是通过文件的修改时间来判断是否要使用缓存的,且逻辑是 若blade文件的修改时间比缓存文件的时间小时 才会使用缓存。

所以,很可能是我机器的时间问题。

于是查了一下虚拟机的时间。。。。果然不正确。

修改好后,blade缓存不更新的问题 fixed~~~

接下来就是得查为什么我的虚拟机时间突然不对了~~~~  反正vmware奇怪的问题总是那么多 见怪不怪了

完结~

/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php:51/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php

代码语言:javascript
复制
/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php

/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php

代码语言:javascript
复制
/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php:51
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 填一个laravel视图缓存没有及时更新的坑
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档