搜尋
首頁php框架ThinkPHPThinkPHP5.2:路由的調整與改進

ThinkPHP5.2:路由的調整與改進

ThinkPHP5.2的路由部分,也和其它元件一樣,做了精簡和優化,主要包括如下方面:

取消路由定義的返回數組形式

因為不利於路由快取生成,路由定義檔取消了返回數組的方式定義路由,必須採用路由方法註冊路由。

例如:

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://域名/入口文件(或者应用名)/控制器名/操作名

應用的路由規則其實是定義的入口檔案(或應用程式名稱)後面的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方法改為只支援陣列參數傳入。

使用強型別參數

由於全面啟用強型別參數,並且使用嚴格模式,所以一定要注意參數的型別。

眾多ThinkPHP入門教學,盡在PHP中文網,歡迎線上學習!

本文轉自:https://blog.thinkphp.cn/916515

以上是ThinkPHP5.2:路由的調整與改進的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:ThinkPHP官网。如有侵權,請聯絡admin@php.cn刪除
ThinkPHP內置測試框架的關鍵功能是什麼?ThinkPHP內置測試框架的關鍵功能是什麼?Mar 18, 2025 pm 05:01 PM

本文討論了ThinkPHP的內置測試框架,突出了其關鍵功能(例如單元和集成測試),以及它如何通過早期的錯誤檢測和改進的代碼質量來增強應用程序可靠性。

如何使用ThinkPHP來構建實時股票市場數據源?如何使用ThinkPHP來構建實時股票市場數據源?Mar 18, 2025 pm 04:57 PM

文章討論了使用ThinkPHP進行實時股票市場數據提要,重點是設置,數據準確性,優化和安全措施。

在無服務器體系結構中使用ThinkPHP的關鍵注意事項是什麼?在無服務器體系結構中使用ThinkPHP的關鍵注意事項是什麼?Mar 18, 2025 pm 04:54 PM

本文討論了在無服務器體系結構中使用ThinkPHP的關鍵注意事項,專注於性能優化,無狀態設計和安全性。它突出了諸如成本效率和可擴展性之類的收益,但也應對挑戰

如何在ThinkPHP微服務中實現服務發現和負載平衡?如何在ThinkPHP微服務中實現服務發現和負載平衡?Mar 18, 2025 pm 04:51 PM

本文討論了在ThinkPHP微服務中實施服務發現和負載平衡,重點是設置,最佳實踐,集成方法和推薦工具。[159個字符]

ThinkPHP依賴性注入容器的高級功能是什麼?ThinkPHP依賴性注入容器的高級功能是什麼?Mar 18, 2025 pm 04:50 PM

ThinkPHP的IOC容器提供了高級功能,例如懶惰加載,上下文綁定和方法注入PHP App中有效依賴性管理的方法。Character計數:159

如何使用ThinkPHP來構建實時協作工具?如何使用ThinkPHP來構建實時協作工具?Mar 18, 2025 pm 04:49 PM

本文討論了使用ThinkPHP來構建實時協作工具,重點關注設置,Websocket集成和安全性最佳實踐。

使用ThinkPHP來構建SaaS應用程序的主要好處是什麼?使用ThinkPHP來構建SaaS應用程序的主要好處是什麼?Mar 18, 2025 pm 04:46 PM

ThinkPHP具有輕巧的設計,MVC架構和可擴展性。它通過各種功能提高可擴展性,加快開發並提高安全性。

如何使用ThinkPHP和RabbitMQ構建分佈式任務隊列系統?如何使用ThinkPHP和RabbitMQ構建分佈式任務隊列系統?Mar 18, 2025 pm 04:45 PM

本文概述了使用ThinkPhp和RabbitMQ構建分佈式任務隊列系統,重點是安裝,配置,任務管理和可擴展性。關鍵問題包括確保高可用性,避免常見的陷阱,例如不當

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境