thinkphp路由是什么

在thinkphp中,路由是指根據url, 分配到對應的處理程序的映射;其作用是簡化URL訪問地址,并根據定義的路由類型做出正確的解析。簡單來說,路由就是一個路徑的解析,根據客戶端提交的路徑,將請求解析到相應的模塊或控制器或方法上。

thinkphp路由是什么

本教程操作環境:Windows7系統、thinkphp v5.1版、Dell G3電腦。

我們來研究一下thinkphp5的路由機制。

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

首先,提出三個問題:

立即學習PHP免費學習筆記(深入)”;

1.Route(路由)是什么?

路由(route)是指根據url,?分配到對應的處理程序的映射。

簡單來說,就是一個路徑的解析,根據客戶端提交的路徑,將請求解析到相應的模塊/控制器/方法上。

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

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

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

2.為什么要使用路由?

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

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

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

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

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

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

Route的使用

使用之前,我們先了解一下配置信息,還是我的這個叉叉項目,打開config文件:

thinkphp路由是什么

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

thinkphp路由是什么

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

未開啟強制路由的時候:

thinkphp路由是什么

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

thinkphp路由是什么

同樣的地址報錯了,并且拋出了一個路由未找到的錯誤,因為我們未在路由文件中定義這個路由,所以它拋出了錯誤,說明我們現在是強制使用了路由。

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

thinkphp路由是什么

找到route文件

thinkphp路由是什么

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

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

看一下效果:

thinkphp路由是什么

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

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

thinkphp路由是什么

thinkphp路由是什么

thinkphp路由是什么

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

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

thinkphp路由是什么

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

更多

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

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

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

【相關教程推薦:thinkphp框架

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享