掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
就如thinkphp官方在文檔開頭所描述的一樣,ThinkPHP6.0基于精簡核心和統(tǒng)一用法兩大原則在5.1的基礎(chǔ)上對底層架構(gòu)做了進一步的優(yōu)化改進,并更加規(guī)范化;其實從5.x版本開始thinkphp本身就是為api應(yīng)用而生。特別是在6.0版本開始框架默認壓根不開啟和提供模板引擎,需要下載安裝模板引擎類庫后方可開啟。
新版本不支持操作原生$_SESSION數(shù)組和所有session_開頭的函數(shù),只能通過Session類(或者助手函數(shù))來操作。因此,Session功能默認是沒有開啟的(API應(yīng)用通常不需要使用Session)。甚至我們可以這樣理解:在6.0版本中框架本身不提供session機制,而是通過think\facade\Session類來模擬實現(xiàn)session。
根據(jù)官方文檔,默認session是不開啟的,需要在全局的中間件中中開啟;讓人如果是多應(yīng)用項目,僅僅想讓session應(yīng)用到某個應(yīng)用,可以在對應(yīng)的應(yīng)用的中間件中開啟。其中全局中間件配置文件位于app/middleware.php
實際上僅僅在中間件中進行session初始化是不行的,如寫入測試代碼:
session('key',1); var_dump(session('key'));
這個時候頁面會int(1),但刷新頁面后重新使用session(‘key’)獲取數(shù)據(jù)會發(fā)現(xiàn)NULL,也就是獲取不到數(shù)據(jù)值。原因在于在上述處理后session的緩存數(shù)據(jù)并沒有保存起來(類似你填寫一個表單,沒點提交,自然刷新后就沒有了)。需要在執(zhí)行設(shè)置session后,執(zhí)行如下代碼進行保存:
實際上僅僅在中間件中進行session初始化是不行的,如寫入測試代碼:
session('key',1); \think\facade\Session::save();
這樣操作后,我們會發(fā)現(xiàn)在框架的runtime目錄中,會出現(xiàn)一個對應(yīng)的session緩存文件。
里面就包含了當(dāng)前會話保存的兩個session值,一個是上面演示的key,一個是另外寫入的vcode。
現(xiàn)在在系統(tǒng)任何位置,執(zhí)行session(‘key’)都能得到預(yù)期的數(shù)據(jù)。
相對于5.x版本,6.x版本的代碼更加精簡,剝離了很多功能模塊,如果要使用這些功能模塊,需要加載額外的類庫或者自己接管相應(yīng)的流程進行處理。所以,筆者不建議把已經(jīng)穩(wěn)定運行的項目升級為了thinkphp6.0版本,官方?jīng)]有提供自動化升級方案,因為差別的東西還是比較多,僅僅提供了升級指導(dǎo),很多流程需要手動去進行升級。我們微構(gòu)網(wǎng)絡(luò)到今年開始才在新項目使用6.0版本,以前的項目使用的的是5.x版本。也嘗試過把老某個相對簡單的老項目升級為6.0版本,雖然升級過程還算順利,但需要填的坑比較多,后續(xù)如果有時間筆者會整理該項目升級到6.0版本過程中遇到的一些典型問題及其解決方法。
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流