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)課程,成功幫助很多小伙伴找到了心儀的工作
ThinkPHP5實戰(zhàn)-仿百度糯米開發(fā)多商家電商平臺
備注:視頻合作方-慕課網(wǎng)