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