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命令清除緩存,要么修改機器時間問題