ThinkPHP5.0版本和ThinkPHP3.2版本的區別
阿新 • • 發佈:2018-11-10
5.0
版本和之前版本的差異較大,本篇對熟悉3.2
版本的使用者給出了一些5.0
的主要區別。
URL和路由
5.0
的URL訪問不再支援普通URL
模式,路由也不支援正則路由定義,而是全部改為規則路由配合變數規則(正則定義)的方式:
主要改進如下;
- 增加路由變數規則;
- 增加組合變數支援;
- 增加資源路由;
- 增加路由分組;
- 增加閉包定義支援;
- 增加MISS路由定義;
- 支援URL路由規則反解析;
請求物件和響應物件
5.0
新增了請求物件Request
和響應物件Response
,Request
統一處理請求和獲取請求資訊,Response
物件負責輸出客戶端或者瀏覽器響應。
模組和控制器
控制器的名稱空間有所調整,並且可以無需繼承任何的控制器類。
- 應用名稱空間統一為
app
(可定義)而不是模組名; - 控制器的類名預設不帶
Controller
字尾,可以配置開啟use_controller_suffix
引數啟用控制器類字尾; - 控制器操作方法採用
return
方式返回資料 而非直接輸出; - 廢除原來的操作前後置方法;
- 增加
beforeActionList
屬性定義前置操作; - 支援任意層次的控制器定義和訪問;
- URL訪問支援自動定位控制器;
資料庫
5.0的資料庫查詢功能增強,原先需要通過模型才能使用的鏈式查詢可以直接通過Db
M
函式呼叫可以改用db
函式,例如:
3.2版本
M('User')->where(['name'=>'thinkphp'])->find();
5.0版本
db('User')->where('name','thinkphp')->find();
主要改進如下:
- 支援鏈式查詢操作;
- 資料查詢支援返回物件、陣列和
PDOStatement
物件; - 資料集查詢支援返回陣列和
Collection
物件; - 增加查詢構造器,查詢語法改變;
- 支援閉包查詢;
- 支援分塊查詢;
- 支援檢視查詢;
- 增加SQL監聽事件;
模型
5.0
的模型變化是最大的,基本上模型是完全面向物件的概念,包括關聯模型,模型類的字尾不再帶Model
,直接由名稱空間區分,原來的D
函式呼叫改為model
函式,並且必須建立對應的模型類,例如:
3.2版本
D('User')->where(['name'=>'thinkphp'])->find();
5.0版本
model('User')->where('name','thinkphp')->find();
主要改進包括:
- 重構關聯模型;
- 支援聚合模型;
- 廢除檢視模型(改為資料庫的檢視查詢方法);
- 模型的擴展采用
Trait
機制; - 增加獲取器和修改器;
- 增加時間戳自動寫入;
- 增加型別欄位轉換;
- 陣列訪問支援;
- JSON序列化支援;
自動驗證和自動完成
5.0的資料自動驗證和自動完成和3.2版本區別較大,5.0的資料驗證採用驗證器定義並且通過think\Validate
類進行統一的驗證。自動完成則通過在模型裡面定義修改器來完成。
異常
5.0
對錯誤零容忍,預設情況下會對任何級別的錯誤丟擲異常(但可以在應用公共檔案中設定錯誤級別),並且重新設計了異常頁面,展示了詳盡的錯誤資訊,便於除錯。
除錯和日誌
5.0
的頁面Trace
強化,支援瀏覽器控制檯檢視Trace資訊。
5.0
的日誌驅動增加Socket
方式,採用SocketLog
支援遠端除錯。
常量
5.0
版本廢棄了原來的大部分常量定義,僅僅保留了框架的路徑常量定義,其餘的常量可以使用App
類或者Request
類的相關屬性或者方法來完成,或者自己重新定義需要的常量。
廢除的常量包括:
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
版本核心框架不依賴任何自定義函式,但仍然封裝了一些常用功能到助手函式,你可以隨意重新定義或者增加助手函式。