### 2019 年 1 月 16 日 發布
ThinkPHP`5.2`的路由部分,也和其它組件一樣,做了精簡和優化,主要包括如下方面:
>[danger] `5.2`版本目前尚未正式發布,在正式發布之前可能仍然會存在變化。
## 取消路由定義的返回數組形式
>[danger] 因為不利于路由緩存生成,路由定義文件取消了返回數組的方式定義路由,必須采用路由方法注冊路由。
例如:
```
return [
'hello/:name' => 'index/hello',
];
```
必須改成:
```
Route::get('hello/:name', 'index/hello');
```
## 多應用的路由定義文件位置
單應用模式下,路由定義文件和之前一樣就在`route`目錄下面,如果你的項目是采用了多應用的話,每個應用的路由定義和匹配都是獨立的,也沒有模塊的概念,路由定義文件的位置應該是在`route/應用子目錄`下面,例如:
```
route/index/route.php // index應用的路由定義文件
route/index/web.php // index應用的第二個路由定義文件
route/admin/route.php // admin應用的路由定義文件
```
默認的URL規則變成了
```
http://域名/入口文件(或者應用名)/控制器名/操作名
```
>[danger] 應用的路由規則其實是定義的入口文件(或者應用名)后面的URL部分,而不包含應用。
## 自動多應用
最新的5.2版本可以支持在同一個入口文件中訪問多個不同的應用(之前必須每個應用添加一個對應的入口文件)。
例如在`index.php`入口文件中使用:
```
(new App())->autoMulti()->run()->send();
```
就可以不必創建入口文件自動通過URL訪問多個應用
```
http://serverName/index.php/admin
```
如果你的默認應用不是`index`(默認為入口文件名),那么可以通過`name`方法指定默認應用。
```
(new App())->autoMulti()
->name('admin')
->run()
->send();
```
支持應用名的別名映射,例如:
```
(new App())->autoMulti([
'think' => 'admin', // 把admin應用映射為think
])->run()->send();
```
如果需要對某個應用進行自定義,可以使用
```
(new App())->autoMulti([
'admin' => function($app) {
$app->debug(true)->useClassSuffix();
}
])->run()->send();
```
## 取消別名路由
因為使用場景有限和性能開銷問題,取消原來的別名路由功能,建議使用資源路由或者單獨的路由替代。
## 取消快捷路由
因為使用場景有限和不太符合規范,取消了原來的控制器快捷路由功能。
## 取消空控制器和空操作
原來的空控制器和空操作功能已經取消,請使用`MISS`路由功能替代,而且可以支持給不同的路由分組設置`MISS`路由。同時廢棄`empty_controller`配置。
## 取消控制器自動搜索
由于性能原因,取消了路由的多級控制器自動搜索功能,請在路由規則定義中明確指定要路由的多級控制器。
## 路由功能獨立設計
路由功能不再固定執行,而且設計成為`AppInit`事件的響應監聽,并且可以在項目的事件定義里面配置,系統默認的定義配置如下:
```
return [
'bind' => [
],
'listen' => [
'AppInit' => [
'think\listener\LoadLangPack',
'think\listener\RouteCheck',
],
'AppBegin' => [
'think\listener\CheckRequestCache',
],
'ActionBegin' => [],
'AppEnd' => [],
'LogLevel' => [],
'LogWrite' => [],
'ResponseSend' => [],
'ResponseEnd' => [],
],
'subscribe' => [
],
];
```
在`AppInit`事件中會執行`think\listener\RouteCheck`類,如果你的應用完全不需要使用任何的路由功能,可以在配置文件中取消定義即可,系統會執行默認的URL調度(也即是控制器/操作)。
## 取消注冊方法的`option`和`pattern`參數
取消路由注冊方法(包括`rule`/`get`/`post`/`put`/`delete`/`patch`/`miss`/`group`等方法)的`option`和`pattern`參數,全部改成方法調用形式,例如原來的:
```
Route::get('hello/:name', 'index/hello', [ 'ext' => 'html'], [ 'name' => '\w+']);
```
需要改成
```
Route::get('hello/:name', 'index/hello')
->ext('html')
->pattern([ 'name' => '\w+']);
```
## 路由分組定義不再支持數組
因為不利于分組的嵌套功能,路由分組定義不再支持數組,只能使用閉包方式定義,例如:
~~~
Route::group('blog', [
':id' => 'Blog/read',
':name' => 'Blog/read',
])->ext('html')->pattern(['id' => '\d+']);
~~~
必須改成
~~~
Route::group('blog', function() {
Route::get(':id', 'Blog/read');
Route::get(':name', 'Blog/read');
})->ext('html')->pattern(['id' => '\d+']);
~~~
如果你需要注冊一個虛擬的路由分組,可以直接在第一個參數使用閉包
~~~
Route::group(function() {
Route::get('blog/:id', 'Blog/read');
Route::get('user/:name', 'User/read');
})->ext('html')->pattern(['id' => '\d+']);
~~~
## 取消了`url_controller_layer`配置
改為在入口文件中使用`controllerLayer`方法設置。
```
(new App())->controllerLayer('Action')
->run()
->send();
```
## 取消`class_suffix`配置
改為在入口文件中使用`useClassSuffix`方法設置。
```
(new App())->useClassSuffix(true)
->run()
->send();
```
同時取消`controller_suffix`和`class_suffix`配置參數。
## 取消`mergeExtraVars`方法和對應參數
改為在路由規則中明確指定變量規則。
## `header`方法參數類型調整
由于強類型約束的原因,`header`方法改為僅支持數組參數傳入。
## 使用強類型參數
由于全面啟用強類型參數,并且使用嚴格模式,所以一定要注意參數的類型。
- 值得升級到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