URL和路由
5.0的URL訪(fǎng)問(wèn)不再支持普通URL模式,路由也不支持正則路由定義,而是全部改為規則路由配合變量規則(正則定義)的方式:
主要改進(jìn)如下:
增加路由變量規則;
增加組合變量支持;
增加資源路由;
增加路由分組;
增加閉包定義支持;
增加MISS路由定義;
支持URL路由規則反解析;
請求對象和響應對象
5.0新增了請求對象Request和響應對象Response,Request統一處理請求和獲取請求信息,Response對象負責輸出客戶(hù)端或者瀏覽器響應。
模塊和控制器
控制器的命名空間有所調整,并且可以無(wú)需繼承任何的控制器類(lèi)。
應用命名空間統一為app(可定義)而不是模塊名;
控制器的類(lèi)名默認不帶Controller后綴,可以配置開(kāi)啟use_controller_suffix參數啟用控制器類(lèi)后綴;
控制器操作方法采用return方式返回數據 而非直接輸出;
廢除原來(lái)的操作前后置方法;
增加beforeActionList屬性定義前置操作;
支持任意層次的控制器定義和訪(fǎng)問(wèn);
URL訪(fǎng)問(wèn)支持自動(dòng)定位控制器;
數據庫
5.0的數據庫查詢(xún)功能增強,原先需要通過(guò)模型才能使用的鏈式查詢(xún)可以直接通過(guò)Db類(lèi)調用,原來(lái)的M函數調用可以改用db函數,例如:
3.2版本
M(‘User’)->where(['name'=>'thinkphp'])->find();
5.0版本
db(‘User’)->where(‘name','thinkphp’)->find();
主要改進(jìn)如下:
支持鏈式查詢(xún)操作;
數據查詢(xún)支持返回對象、數組和PDOStatement對象;
數據集查詢(xún)支持返回數組和Collection對象;
增加查詢(xún)構造器,查詢(xún)語(yǔ)法改變;
支持閉包查詢(xún);
支持分塊查詢(xún);
支持視圖查詢(xún);
增加SQL監聽(tīng)事件;
模型
5.0的模型變化是最大的,基本上模型是完全面向對象的概念,包括關(guān)聯(lián)模型,模型類(lèi)的后綴不再帶Model,直接由命名空間區分,原來(lái)的D函數調用改為model函數,并且必須創(chuàng )建對應的模型類(lèi),例如:
3.2版本
D(‘User’)->where(['name'=>'thinkphp'])->find();
5.0版本
model(‘User’)->where(‘name','thinkphp’)->find();
主要改進(jìn)包括:
重構關(guān)聯(lián)模型;
支持聚合模型;
廢除視圖模型(改為數據庫的視圖查詢(xún)方法);
模型的擴展采用Trait機制;
增加獲取器和修改器;
增加時(shí)間戳自動(dòng)寫(xiě)入;
增加類(lèi)型字段轉換;
數組訪(fǎng)問(wèn)支持;
JSON序列化支持;
自動(dòng)驗證和自動(dòng)完成
5.0的數據自動(dòng)驗證和自動(dòng)完成和3.2版本區別較大,5.0的數據驗證采用驗證器定義并且通過(guò)think\Validate類(lèi)進(jìn)行統一的驗證。自動(dòng)完成則通過(guò)在模型里面定義修改器來(lái)完成。
異常
5.0對錯誤零容忍,默認情況下會(huì )對任何級別的錯誤拋出異常(但可以在應用公共文件中設置錯誤級別),并且重新設計了異常頁(yè)面,展示了詳盡的錯誤信息,便于調試。
調試和日志
5.0的頁(yè)面Trace強化,支持瀏覽器控制臺查看Trace信息。
5.0的日志驅動(dòng)增加Socket方式,采用SocketLog支持遠程調試。
常量
5.0版本廢棄了原來(lái)的大部分常量定義,僅僅保留了框架的路徑常量定義,其余的常量可以使用App類(lèi)或者Request類(lèi)的相關(guān)屬性或者方法來(lái)完成,或者自己重新定義需要的常量。
廢除的常量包括:
REQUEST_METHOD IS_GET IS_POST IS_PUT IS_DELETE IS_AJAX __EXT__ COMMON_MODULE MODULE_NAME CONTROLLER_NAME ACTION_NAME APP_NAMESPACE APP_DEBUG MODULE_PATH
函數
5.0版本核心框架不依賴(lài)任何自定義函數,但仍然封裝了一些常用功能到助手函數,你可以隨意重新定義或者增加助手函數。