首頁 php框架 ThinkPHP ThinkPHP5.2:路由的調整與改進

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

Dec 16, 2019 pm 03:10 PM
thinkphp5.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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

用 NTP 時間伺服器錯誤修復路由器失去聯繫的 3 種方法 用 NTP 時間伺服器錯誤修復路由器失去聯繫的 3 種方法 May 22, 2023 pm 03:43 PM

連接和WiFi的問題可能會非常令人沮喪並顯著降低生產力。電腦使用網路時間協定(NTP)進行時脈同步。在大多數情況下(如果不是全部),您的筆記型電腦使用NTP來追蹤時間。如果您的伺服器因NTP時間伺服器錯誤訊息而失去聯繫,請閱讀本文到底以了解如何修復它。當路由器的時間設定不正確時會發生什麼事?路由器的效能通常不受時間設定錯誤的影響,因此您的連線可能不會受到影響。但是,可能會出現一些問題。這些包括:使用路由器作為本地時間伺服器的所有小工具的時間不正確。路由器日誌資料中的時間戳記將是錯誤的。如果由於

如何在 Windows 11 / 10 上解決無網路安全問題 如何在 Windows 11 / 10 上解決無網路安全問題 May 11, 2023 pm 10:07 PM

在Windows11/10電腦上看到的與網路連線相關的問題之一是「無互聯網,安全性」錯誤訊息。基本上,此錯誤訊息表示系統已連接到網絡,但由於連線有問題,您無法開啟任何網頁並接收資料。在Windows中連接到任何網路時可能會遇到此錯誤,最好是透過不在附近的WiFi路由器連接到Internet時。通常,當您檢查系統托盤右下方的無線圖示時,會看到一個黃色的小三角形,當您按一下它時,會顯示無Internet,安全訊息。出現此錯誤訊息沒有具體原因,但配置設定的變更可能會導致您的路由器無法連接

在Slim框架中實作API路由的方法 在Slim框架中實作API路由的方法 Aug 02, 2023 pm 05:13 PM

在Slim框架中實作API路由的方法Slim是一款輕量級的PHP微型框架,它提供了一個簡單且靈活的方式來建立Web應用程式。其中一個主要功能是實作API路由,使我們能夠將不同的請求對應到對應的處理程序。本文將介紹如何在Slim框架中實作API路由,並提供一些程式碼範例。首先,我們需要安裝Slim框架。可以透過Composer來安裝最新版本的Slim。打開終端機並

Java Apache Camel:打造靈活且有效率的服務導向架構 Java Apache Camel:打造靈活且有效率的服務導向架構 Feb 19, 2024 pm 04:12 PM

ApacheCamel是一個基於企業服務匯流排(ESB)的整合框架,它可以輕鬆地將不同的應用程式、服務和資料來源整合在一起,從而實現複雜的業務流程自動化。 ApacheCamel使用基於路由的設定方式,可以輕鬆定義和管理整合流程。 ApacheCamel的主要特點包括:靈活性:ApacheCamel可以輕鬆地與各種應用程式、服務和資料來源整合。它支援多種協議,包括Http、JMS、SOAP、FTP等。高效性:ApacheCamel非常高效,它可以處理大量的訊息。它使用非同步訊息傳遞機制,可以提高效能。可擴

如何在ThinkPHP6中使用路由 如何在ThinkPHP6中使用路由 Jun 20, 2023 pm 07:54 PM

ThinkPHP6是一款強大的PHP框架,具有便利的路由功能,可輕鬆實現URL路由配置;同時,ThinkPHP6也支援多種路由模式,如GET、POST、PUT、DELETE等等。本文將介紹如何使用ThinkPHP6進行路由設定。一、ThinkPHP6路由模式GET方式:GET方式是用來取得資料的一種方式,常用於頁面展示。在ThinkPHP6中,可以使用如下

如何修復iPhone WiFi不斷斷開連接反覆[已解決] 如何修復iPhone WiFi不斷斷開連接反覆[已解決] May 20, 2023 pm 01:55 PM

許多iPhone用戶對在iPhone上遇到的嚴重問題之一表示失望。問題是他們的iPhone時不時地斷開與Wi-Fi的連線。這確實是一個主要問題,因為Wi-Fi是使用iPhone上大多數應用程式的必需品。我們已經徹底分析了這個問題,並找出了可能負責的因素,並在下面列出。自動加入設定已停用網路設定中的一些更改Wi-Fi密碼已更改Wi-Fi路由器的問題在研究了上述這些因素之後,我們編制了一套解決方案,可以解決與Wi-Fi問題斷開連接的iPhone。修復1–開啟Wi-Fi的自動加入設定如果未啟用Wi

路由可以做到ARP欺騙防禦,抑制廣播風暴和內網病毒防禦嗎 路由可以做到ARP欺騙防禦,抑制廣播風暴和內網病毒防禦嗎 May 22, 2023 am 08:52 AM

這裡說的路由,是千元以上的路由,一千塊以下的就不談的。現在很多企業路由,都說有這樣的功能,但是這樣的功能是要有前提,就是電腦一定要直接路由上,如果隔了交換機,這些功能對於電腦來說,形同虛設。而區域網路裡面出現廣播風暴,ARP欺騙這些問題都是很常見的問題,問題不大,可是非常討嫌。真要解決廣播風暴,ARP欺騙或網路環路不難的,難就在如何發現這些問題。推薦我們的系統的「佛性」插件。之所以為說「佛性」因為這個檢測功能是基於上網行為管理,網路監控資料解析的核心來的,而且只有上網行為管理才能做到,原應該放在

如何在Vue專案中使用路由實現頁面切換動畫效果的客製化? 如何在Vue專案中使用路由實現頁面切換動畫效果的客製化? Jul 21, 2023 pm 02:37 PM

如何在Vue專案中使用路由實現頁面切換動畫效果的客製化?引言:在Vue專案中,路由是我們常用的功能之一。透過路由可以實現頁面之間的切換,提供了良好的使用者體驗。而為了讓頁面切換更加生動,我們可以透過客製化動畫效果來實現。本文將介紹如何在Vue專案中使用路由實現頁面切換動畫效果的客製化。建立Vue專案首先,我們需要建立一個Vue專案。可以使用VueCLI來快速搭建

See all articles