TP5路由分發(fā)原理簡介

1、thinkphp5中一個典型的URL請求的執(zhí)行過程大致如下:


用戶請求 -> 路由解析 -> 調(diào)度請求 -> 執(zhí)行操作 -> 響應(yīng)輸出


2、路由在框架中的作用打個比方的話,路由好比是WEB應(yīng)用的總調(diào)度室,對于訪問的URL地址,路由可以拒絕或者接受某個URL請求,并進行分發(fā)調(diào)度,而且還有一個副作用是因為路由規(guī)則可以隨意定義,因此可以讓你的URL請求地址更優(yōu)雅,因為不會暴露實際的URL地址,也就意味著更安全,5.0的路由不僅僅只是支持路由到控制器的操作方法,甚至可以路由到任何的類或者閉包。


3、那么我們來分析下路由內(nèi)部做了哪些事情,還是列舉一個簡單的例子


url請求過來會執(zhí)行 App類里面的run方法,這個方法中tp5會去檢測路由,也就是routeCheck方法,這個方法會去加載application應(yīng)有目錄下的route.php,這個文件其實就是我們自定義的一些路由規(guī)則 , 然后再通過tp內(nèi)置的Route類庫批量注冊路由, 比如如果我們在route.php里面注冊了這么一個路由信息'test' => 'index/index/test' (備注:比如我們訪問xxx.com/test 實際上他是定位到xxx.com/index/index/test) 那么這些信息就會被Route基礎(chǔ)類庫注冊到路由中,之后需要做的路由檢測(根據(jù)路由定義返回不同的URL調(diào)度),這個時候需要分2種情況 ,第一種情況:檢測后有值(備注:比如這種地址xxx.com/test的訪問) 第二種情況:無內(nèi)容、這說明當(dāng)前的url請求不在自定義的路由配置中(比如最簡單的xxx.com/index/index/index這個地址的訪問),那么這個時候會執(zhí)行Route::parseUrl這個解析,但是不管怎么樣這兩種情況的結(jié)果返回的都是如下格式:

Array

(

? ?[type] => module ? ?#類型 ?tp5中有好幾種 具體幾個類型可以參考App類里面的exec方法

? ?[module] => Array

? ? ? ?(

? ? ? ? ? ?[0] => xxx ?#模塊

? ? ? ? ? ?[1] => xxx ?#控制器

? ? ? ? ? ?[2] => xx ? #方法

? ? ? ?)


)

4、接下來會根據(jù)上面返回的內(nèi)容 來記錄當(dāng)前調(diào)度信息,然后會去執(zhí)行app類里面的exec方法,我們已type=module來舉例, 之后就會去執(zhí)行App類里面的module(執(zhí)行模塊方法)、大致就這么回事


案例分析:

我們用一個URL請求案例來體驗下路由的使用,定義一個控制器類命名為application/index/controller/Index.php:


namespace app\index\controller;


class Index

{

? ?public function test()

? ?{

? ? ? ?return 'hello-test' ;

? ?}

}

要訪問Index控制器的test操作方法的話,沒有定義路由規(guī)則之前,訪問的URL地址應(yīng)該是:


http://xxx.com/index/index/test

訪問后瀏覽器輸出結(jié)果為:

hello-test

下面我們來定義一個路由:

在application目錄下的route.php中加入:'test' => 'index/index/test',


定義后,我們就可以直接訪問下面的地址:


http://xxx.com/test

訪問后瀏覽器輸出結(jié)果和之前是一樣的。

之前singwa做過2套實戰(zhàn)課程,成功幫助很多小伙伴找到了心儀的工作

前端到后臺ThinkPHP開發(fā)整站

ThinkPHP5實戰(zhàn)-仿百度糯米開發(fā)多商家電商平臺

備注:視頻合作方-慕課網(wǎng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評論 19 139
  • 路由作用 1.根據(jù)實現(xiàn)定義的路由規(guī)則,檢驗URL請求,確定執(zhí)行或者拒絕; 2.路由規(guī)則可自定義,隱藏了原URL地址...
    PlusNie閱讀 2,747評論 1 5
  • [toc] 概述 由于ThinkPHP5.0默認采用的URL規(guī)則是: http://server/module/c...
    呦丶耍脾氣閱讀 8,592評論 0 1
  • 22年12月更新:個人網(wǎng)站關(guān)停,如果仍舊對舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,435評論 22 257
  • 相信iOS開發(fā)過程中,肯定大多數(shù)人都知道Timer的釋放不掉問題,但是否認真考慮過其中釋放不掉的原因? NSTim...
    小小棒棒糖閱讀 4,388評論 7 7

友情鏈接更多精彩內(nèi)容