laravel框架cookie應用到中間件的理解


昨天博主接到一個委托的需求,大數據同事想要在請求日志抓取數據,希望在我的每個頁面進行cookie的種植,方便他們進行定位分析,我思考了一下,簡單呀,首先考慮的是通過中間件進行cookie種植,但是隨后發現在現在的項目結構里貿然增加一個單純的非通用性的中間件,會導致項目的耦合增加於是乎,開始研究項目路由,好在,我的項目里面,所有路由都指向了同一個控制器(框架結構里面還有其他項目),於是乎,開動。
首先,增加了一個cookie種植的私有方法,放到控制器的構造函數里面,這樣就可以實現cookie種植啦,cookie操作直接使用了框架自帶的cookie啦,在app.php里面:
中文官方文檔里面cookie有兩種用法,第一種就是實例化一個response類 ,然后用withCookie()方法去種植:
return response($content) ->header('Content-Type', $type) ->cookie('name', 'value', $minutes);
 
或者
$response = new Response();
$cookie = cookie('name,'value',10);//保存10分鍾
return $response->withCookie($cookie);
 
但是經過百度之后發現了一個更更加靈活的使用方式:
Cookie::queue('name','value',10);
這種方式更加適用於控制器哦
但是這個里這么了博主好幾個小時,網上其他大咖分享的知識,都是在控制器使用之后完美種植,奈何我無論如何都不能實現(response可以實現),郁悶,沉浸下來思考了一下,應該是我們項目和標准框架那里有差異,於是各種搜索,琢磨開始了,最后發現了一個可疑的類:AddQueuedCookiesToResponse,從字面可以看出它的功能,添加隊列cookie到響應,而且還使用了getQueuedCookies()方法(注:和queue方法同屬於CookieJar類),后來搜索后發現,標准框架里面,該類作為web中間件是被默認開啟的,但是被人給注釋掉了,哭~
好了,cookie種植已經解決,但是有個問題需要思考一下,之前一般用的中間件都是在執行控制器之前執行,為什么這個中間件是在之后執行呢?
關鍵點在於這里:
沒錯,就是$next($request),這里應該是把請求轉發到下一個步驟了,也就是控制器,控制器執行完畢,返回一個響應類,如果需要在控制器執行完畢之后處理響應,就可以對返回的response進行相關操作了,總結完畢~


免責聲明!

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



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