1. 程式人生 > >ThinkPHP5 之route(路由)簡述

ThinkPHP5 之route(路由)簡述

版本TP5

TP5 Route

前言

本文我們來研究一下ThinkPHP5的路由機制。

雖然說TP5的完全開發手冊上面講路由講的很清楚,但是我們還是在本文研究一下TP5的路由是怎麼一回事,畢竟看部落格比看書要舒服一些嘛。

首先,提出三個問題:

1.Route(路由)是什麼?

官方文件裡面是這樣子定義的=>路由的作用是簡化URL訪問地址,並根據定義的路由型別做出正確的解析。

手動解釋一下:平常我們按照習慣去訪問我們的ThinkPHP專案的時候,常規的url應該是這樣子寫的,(本地舉例)http://localhost/專案名/public/index.php/模組名/控制器名/方法名

一串url輸進去之後,就會感覺很絕望,(小聲吐槽)=>“我只是想測試一個小介面讓我打這麼長一串地址、地址太長記不住呀......”。這個時候我們就可以用路由去簡化他的地址,並且在縮短地址的同時進行一些規則的定義。

2.為什麼要使用路由?

可能有人會脫口而出:為了簡化路徑呀。當然,這是原因之一,但原因並沒有那麼簡單。

簡化路徑是一個比較大的原因,因為我當初就是覺得路徑太長然後跑過去把路由開起來了,但是後來在使用的過程中,發現Route的作用其實不僅侷限於簡化路徑。

我們可以開啟路由的強制使用,讓大家只能從我定義的路由進來,這樣就有一個好處,你在一些不想給使用者訪問的控制器寫了一些指令碼,你開啟了完全路由強制使用的話,使用者是訪問不了這些指令碼的,否則的話,使用者如果訪問了這些指令碼,指令碼有時修改資料庫的,那麼就比較危險了。

還有就是我們可以定義好從這個路徑進來是get操作還是post操作,就不會出現以前有種什麼情況,一個控制器的方法,你從get也可以訪問,post也可以訪問,就很雜亂,當然有人會說,get和post都能訪問也沒什麼大不了的吧,其實將這些方法之間區分開來,對於Restful API的思想的體現是比較有幫助的。

同理,http和https的規定我就不說了。

到了這裡,大家是不是覺得路由有些神奇了,原來它可以幹這麼多事情,那麼我們就來研究一下怎麼去使用它。

Route的使用

使用之前,我們先了解一下配置資訊,還是我的這個叉叉專案,開啟config檔案:


有兩個要注意的地方,首先第一個紅框裡面tp預設是給我們開啟了路由這個模式的,第二個紅框,tp預設是關閉掉強制使用路由這一項,什麼意思呢?就是我現在通過我們平常的地址模式訪問也可以成功,通過路由訪問也可以成功。

我平常做專案的時候為了安全起見是會將這一條改成true的,那麼我們來看一下效果

未開啟強制路由的時候:


按照常規的地址訪問是可以成功的,好我們現在開啟強制使用路由:


同樣的地址報錯了,並且丟擲了一個路由未找到的錯誤,因為我們未在路由檔案中定義這個路由,所以它丟擲了錯誤,說明我們現在是強制使用了路由。

那麼我們現在來定義一下它,首先從最簡單的一種:


找到route檔案


首先我們先要引入一下think下面的路由這個類,然後我們呼叫裡面get靜態方法,從方法名我們可以很容易得知,這是通過get方法去訪問的,那麼第一個引數和第二個引數代表什麼呢,第二個引數代表常規url中的 模組/控制器/方法,第一個引數代表想要用什麼名稱來替換後面的 模組/控制器/方法。

也就是說,我原本使用http://localhost/xx/public/index.php/xx/test/xx可以訪問到我的控制器方法,現在只需要http://localhost/xx/public/index.php/xx就可以訪問到我的控制器方法了。

看一下效果:


成功使用路由訪問,那麼,下一步我們來細究一下這個規則的制定(比如說get和post訪問的區別)

我現在將get方法改成post方法然後我在用get方法去訪問看看會發生什麼:




可以看到我們採用了get是訪問不到的,只有post才能訪問到,怎麼樣,感受到路由好玩的地方了嗎。

深一點的我們還可以這樣子定義路由:


第三個引數代表訪問的方式,像我這裡面定義的這種形式就是get和post操作都可以訪問到,最後一個引數代表的是要不要檢驗https協議,如果是false的話就不會檢驗https,如果是true的話我們用http去訪問的時候就會找不到,這樣子我們就更近一步的保障了我們的介面的安全性。至於效果的話就不演示了。

更多

路由還有什麼特別之處呢?路由甚至可以將get操作傳的引數歸併進url裡面,我們原本的get操作應該是這樣子的:url?id=1,經過路由之後,我們可以把它規定成 url/1,這樣子連id這個引數都被隱藏掉了,好處大家都曉得吧。至於過程的話就上開發手冊上去淘一淘吧。

當然,路由還有一些別的輔助性的小功能,比如說閉包函式呀什麼的,我就不一一介紹了,因為這種輔助性的功能在開發過程中不是很常用,感興趣的話可以去完全開發手冊上面去看。

路由的相關簡介和使用路由的好處就介紹到這裡。

下節地址:https://blog.csdn.net/qq_36652619/article/details/80295226