### 2019 年 10 月 13 日 發布
ThinkPHP最新的`6.0`版本原計劃于國慶左右發布,由于國慶期間本著核心精簡的原則對多應用模式做了一些調整,為了避免可能的問題還需要做更充分的測試,加上新版框架的安全審計工作仍然還在繼續,所以在計劃之外額外發布了一個`RC5`積累更新版本,正式版本的發布日期推遲到10月24日。
>[danger] 官方本著認真和嚴謹的態度對待此次ThinkPHP`6.0`的發布工作,我們希望交付給開發者的新版是一個更好用而且架構穩定的版本,相信這是一個值得等待的框架。
下面是`RC5`版本自`RC4`之后的主要更新,基本上不影響之前版本的升級,并且官方完全開發手冊的內容已經同步更新。
## 多應用模式調整
鑒于多應用模式的復雜性和擴展性考慮,最新版本把多應用模式獨立為框架的一個全局中間件擴展。默認安裝后核心框架為單應用模式,如果需要使用多應用模式,可以安裝
```
composer require topthink/think-multi-app
```
安裝后會自動注冊一個全局中間件并優先執行,就可以自動支持多應用模式,無需做任何的配置調整。如果需要進行應用映射或者域名綁定的話,仍然設置`app_map`以及`domain_bind`即可。
如果你的入口文件是`index.php`的話,會自動開啟自動多應用模式。如果你的入口文件是其它,例如`admin.php`或者`api.php`則會自動綁定`admin`或者`api`應用,當然,如果你在入口文件中已經使用`name`方法綁定了應用,則優先。
另外,如果是自動多應用模式下,URL里面的應用不存在,會自動處理為單應用解析,也就是說多應用和單應用是可以在新版的架構下共存。舉個例子,當我們訪問下面的URL:
```
http://tp.com/think
```
假設`think`應用并不存在(也沒有定義任何的應用映射),當我們訪問上面的地址的時候會自動進行單應用解析,也就是說如果有定義全局路由(例如`route/route.php`)的話
```
Route::get('think', function () {
return 'hello,ThinkPHP!';
});
```
頁面會輸出
~~~
hello,ThinkPHP!
~~~
這樣設計的初衷是為了更加方便擴展注冊全局路由,避免在開啟多應用模式的情況下注冊的全局路由失效(比如之前的驗證碼擴展只能用于單應用模式,多應用模式需要單獨注冊路由)。
如果你完全不需要單應用模式,也可以設置使用嚴格的多應用模式
```
'app_express' => true,
'default_app' => 'home',
```
當我們再次訪問
```
http://tp.com/think
```
的時候,其實是訪問默認(`home`)應用的`think`路由。
## 中間件機制改進
由于多應用擴展獨立后,中間件機制也隨之進行了一些優化和調整,現在中間件大致分為四個組,包括全局中間件、應用中間件、路由中間件和控制器中間件,每個中間件組彼此獨立按順序運行。
在`app/middleware.php`文件里面定義的中間件即為全局中間件,執行優先級最高(相對于前置中間件而言),如果使用了多應用模式,并且在應用目錄下也定義了`middleware.php`文件,即為應用中間件,執行優先級僅次于全局中間件。
如果在路由注冊的時候定義了中間件即為路由中間件,注意,在路由中間件執行之前是獲取不到當前應用的控制器和操作名的(所以,全局中間件和應用中間件執行的過程中是無法獲取控制器和操作名的),如果你不想在路由注冊的時候定義中間件,還有一個額外的辦法,就是在路由配置文件(包括全局路由配置和應用路由配置)中定義`middleware`參數,無論是否匹配路由都會執行,類似于全局路由中間件的概念。
~~~
'middleware' => [
app\middleware\Auth::class,
app\middleware\Check::class,
],
~~~
## 中間件調度優化
中間件的執行流程改進,`think\middleware`僅僅負責中間件的管理和調度,增加`think\Pipeline`類負責中間件的執行。并支持控制中間件的執行順序。中間件配置文件的格式做了一些調整,除了定義中間件別名外,增加了執行優先級設置。
```
return [
// 別名或分組
'alias' => [
],
// 優先級設置,此數組中的中間件會按照數組中的順序優先執行
'priority' => [
],
];
```
## 中間件`end`回調
中間件增加`end`回調,如果在中間件類中有定義`end`方法,則會在請求結束后統一調用。
```
public function end(Response $response)
{
}
```
## 中間件執行去重
對于每個分組的中間件,會進行強制去重操作,也就是說在一個分組中的中間件只可能執行一次。
## 模板目錄自動識別
模板目錄無需再進行任何的配置,取消了`view_base`配置,改為自動識別,應用目錄下的`view`目錄優先,如果不存在,則會使用應用根目錄下的`view`目錄。如果要單獨定義某個應用的模板目錄,則使用`view_path`配置參數定義即可。
## 事件智能訂閱改進
事件智能訂閱的時候不再需要事先注冊和定義事件,采用反射機制自動識別訂閱事件。
## 應用名獲取調整
多應用模式改成擴展后,核心已經完全解耦了多應用相關的方法和屬性,所以如果你需要獲取當前的應用名,需要改成
```
app('http')->getName();
```
對于使用中間件進行權限控制用途的,官方的建議是采用`pathinfo`地址進行權限判斷。
## `think-swoole`擴展更新
`think-swoole`擴展也在持續更新和完善,現在已經支持數據庫和緩存的連接池功能,以及RPC功能。
## 調試工具更新
原來內置的頁面Trace調試工具已經更改為擴展的方式,改成安裝[`think-trace`](https://github.com/top-think/think-trace)擴展,如果通過composer安裝應用的話,默認會安裝`topthink/think-trace`擴展,或者直接安裝。
```
composer require topthink/think-trace
```
>[danger] 原核心內置的`TraceDebug`中間件不再使用,請在中間件定義文件中注釋掉。
基本用法和之前保持不變,但無需額外配置,默認使用`html`方式顯示,同時仍然支持瀏覽器控制臺顯示,并僅在調試模式下有效。
同時增加了一個基于[`debugbar`](http://phpdebugbar.com/)的調試擴展[`think-debugbar`](https://github.com/top-think/think-debugbar),需要單獨安裝后才能使用。
```
composer require topthink/think-debugbar
```
## 關于官網的升級重構
最后一個是關于官網的消息,為了迎接新版的發布,ThinkPHP官網這次終于要更新了。官方計劃在本月對舊版(史前)官網進行ThinkPHP`6.0`的升級重構,同時改進用戶體驗和手機閱讀體驗。
- 值得升級到5.1的18個理由
- 5.1.7版本新特性
- JSON字段類型在ORM中的使用
- 文件下載響應對象
- 教你使用5.1的數組對象查詢
- 模型三大利器之一:搜索器
- 在ThinkPHP中使用Yaconf
- 掌握命令行的表格輸出
- 5.1.25查詢參數綁定的改進
- ThinkPHP安全規范指引
- 巧用數據集的排序功能實現統計排序
- think-orm ——基于5.1的獨立ORM庫
- think-template——基于ThinkPHP的獨立模板引擎
- ThinkPHP5.1.26版本發布——修正版本,包含安全更新
- ThinkPHP5.0和3.2再發安全更新
- 官宣:ThinkPHP發布首個LTS版本
- 你真的了解Db類和模型的正確使用姿勢么?
- 如何更有效的記錄和管理日志
- 模型三大利器之二:修改器
- ThinkPHP5.1.28版本發布——修正上一版本問題,改進關聯查詢
- 模型三大利器之三:獲取器
- API版本控制的幾種思路
- ThinkPHP5.2第一個Beta版本發布測試
- 讓你少犯錯的數據查詢基本原則
- ThinkPHP發布5.1.29版本——常規更新
- 這15個好習慣讓你更容易升級到5.2
- 如何有效提高ThinkPHP的應用性能
- 讓你提高開發效率的查詢技巧
- 模型關聯查詢不完全指南
- 5.2發布Beta2版本——統一和精簡大量用法
- ThinkPHP發布5.1.30版本——支持微秒時間字段寫入
- ThinkPHP的數據緩存使用
- ThinkPHP5.2安裝及入口文件
- ThinkPHP榮獲2018 年度最受歡迎中國開源開發框架第1名
- 5.1路由使用心得技巧
- ThinkPHP5.*版本發布安全更新
- ThinkPHP項目及代碼規范指北
- 5.2版本的設計規范指導
- ThinkPHP5.1.32版本發布——圣誕快樂
- 利用Trait特性給模型增加樂觀鎖功能
- 5.2數據庫和模型的變化(摘要)
- ThinkPHP模板引擎實現和常見問題
- ThinkPHP5.0.24版本發布——安全更新
- 不忘初心,方得始終——ThinkPHP十三周年報告
- ThinkPHP5+相關資源匯總
- 異步社區ThinkPHP周年慶專享優惠活動
- 5.2路由的調整和改進
- ThinkPHP發布5.1.33版本——包含安全更新
- ThinkPHP擴展開發指南
- ThinkPHP發布5.2Beta3版本
- ThinkPHP發布5.1.34版本——喜迎新年
- ThinkPHP發布5.2RC1版本
- ThinkPHP發布5.1.35版本——常規更新
- 5.2配置類的調整
- 5.2時間查詢的改進和優化
- 5.2RC版本升級不完全指導(僅供學習參考)
- ThinkPHP5.2版本正式變更為6.0版本
- ThinkPHP百度云云虛擬主機專享免費活動
- 事件系統以及查詢事件、模型事件的使用
- ThinkPHP6.0RC2版本發布——架構升級、精簡核心
- ThinkPHP5.1.36LTS版本發布——常規更新
- 新版Session和Cookie設計變化
- ThinkPHP5.1.37版本發布——常規更新
- ThinkPHP6.0RC3版本發布——細節完善,體驗優化
- 6.0中間件使用詳解
- Composer各大廠商鏡像地址
- ThinkPHP6.0發布計劃公告
- 「ThinkPHP開發者周刊」招募志愿者
- ThinkPHP6.0日志變化
- ThinkPHP5.1.38版本發布——常規更新
- ThinkPHP6.0RC4版本發布——ORM獨立,日志多通道支持
- ThinkORM2.0開發指南上線
- ThinkPHP6.0RC5版本發布——多應用模式獨立,中間件機制調整
- ThinkPHP6.0版本發布——程序員節福利
- ThinkPHP5.1.39LTS版本發布——常規更新
- ThinkPHP6.0.1版本發布——圣誕快樂!
- 回顧2019,展望2020!
- ThinkPHPV6.0.2版本發布——2020新春快樂!
- 周年福利系列:Swoole合作優惠
- 億速云成為ThinkPHPV6.0獨家贊助發布商??
- 新冠疫情工具和限免資源專題(保持更新中)
- 周年福利系列:創宇信用認證合作優惠
- 周年福利系列:碼云企業版限時10%優惠
- 周年福利系列:想天短說抵現優惠
- think-swoole直播:從零開始掌握swoole開發
- 周年福利系列:B2C開源電商ShopXO授權8折優惠
- 周年福利系列:LayuiAdmin 永久授權限時優惠
- ThinkPHP資源導航站上線——構建生態 服務未來
- ThinkPHP官方技術支持服務和應用服務市場上線公測
- ThinkPHP市場精選——推廣基本要素
- ThinkPHP市場精選——客服聊天專題
- ThinkPHPV6.0.3版本發布——端午安康
- ThinkPHP開發者扶持計劃
- 6.0.3版本關鍵更新及升級事項
- 「ThinkPHP開發者周刊」改版重啟
- ThinkPHP市場精選——企業建站專題
- ThinkPHP 提供統一API接口服務
- ThinkPHP市場精選——直播電商專題
- ThinkAPI服務SDK發布
- 官方服務市場啟用獨立子域名
- ThinkPHP市場精選——刷臉支付專題
- ThinkAPI推出會員服務計劃
- ThinkPHPV6.0.4版本發布——中秋國慶雙節快樂
- ThinkPHPV5.1.40版本發布——常規更新
- 1024程序員節福利走一波
- ThinkPHP V6.0.5版本發布——兼容Composer2.0
- 知識圖譜應用場景——源論技術沙龍
- ThinkPHP5.*版本改進Composer2.0的兼容
- 官方市場雙十一精選推薦
- 技術人做產品有機會么(文末送課程)
- 本周秒殺——古德云售后獲客營銷系統
- ThinkAPI服務更新——支持接口分組和PHP版本依賴調整
- PHP8新特性盤點
- PHP8新特性系列:構造器屬性提升使用及注意事項
- ThinkPHP2021新年寄語
- ThinkPHP V6.0.6&V5.1.41版本發布——兼容PHP8.0
- PHP如何更優雅地調用API接口
- ThinkPHP V6.0.7發布——修正版本
- ThinkAPI服務更新——IP白名單
- 最新版ThinkORM對于時間字段的調整
- ThinkAPI短信接口正式上線
- ThinkPHP V6.0.8版本發布——多環境變量配置支持
- 頂想云寫作服務開啟第一次公測
- ThinkSSL上線——官方SSL/TLS證書服務
- MDBootstrap國內用戶福利——ThinkPHP官方市場首發
- ThinkPHP V6.0.9版本發布——常規更新
- ThinkORM功能盤點——虛擬模型
- 全面支持主流GIT版本庫——云寫作服務第二次公測
- 云寫作服務私有化部署方案之:版本庫私有化
- 看云雙十一活動
- ThinkPHP V6.0.10LTS發布——兼容PHP8.1
- ThinkPHP V6.0.12發布——命令行兼容8.1
- 頂想云知識管理上線公測——構建企業文檔中心和知識庫
- 頂想云上線——助力生態數字化建設
- 618活動進行中——官方市場迎來一波更新
- 頂想云知識管理正式上線——看云文檔啟動遷移服務
- ThinkPHP V6.0.13發布——常規更新
- 頂想云網站助理服務上線——構建產品支持服務
- ThinkPHP發布6.1.0&6.0.14版本——安全更新
- ThinkPHP新版社區上線試運營
- ThinkAPI上架人臉核身接口——助力網站實名認證
- 辭舊迎新——舊版社區停止注冊及發帖
- ThinkPHP6.1.2版本發布——兼容PHP8.2