填一個laravel視圖緩存沒有及時更新的坑


1.此坑背景

laravel在渲染blade模板后,會將渲染好的結果存到storage/framework/views(默認路徑,也可在配置中修改的)中,以便下次使用。
但我最近總是發現修改了blade模板,但怎么刷新都還是有視圖緩存。除非執行 php artisan view:clear 清空緩存。


google 好多次,得到了以下結論: 
1.laravel 的視圖緩存是無法設置過期時間的。
2.laravel的視圖緩存功能是無法關閉的。


如果是這樣,那一定是我的開發環境出了問題。因為現狀很明顯,竟然一直有緩存! 
那么就開始解決問題之路。


2.先說結論
我的開發機(用的vmware上的虛擬機)的系統時間和本地時間不一樣導致模板文件更新有問題。
解決方法:校准開發機時間

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文件的修改時間比緩存文件的時間小時 才會使用緩存。
所以,很可能是我機器的時間問題。

所以出現這種情況時要么執行php artisan view:clear命令清除緩存,要么修改機器時間問題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM