本文我們來研究一下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的規定我就不說了。
到了這裡,大家是不是覺得路由有些神奇了,原來它可以幹這麼多事情,那麼我們就來研究一下怎麼去使用它。
使用之前,我們先了解一下配置資訊,
還是我的這個叉叉專案,開啟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這個引數都被隱藏掉了,好處大家都曉得吧。至於過程的話就上開發手冊上去淘一淘吧。
當然,路由還有一些別的輔助性的小功能,比如說閉包函式呀什麼的,我就不一一介紹了,因為這種輔助性的功能在開發過程中不是很常用,感興趣的話可以去完全開發手冊上面去看。
路由的相關簡介和使用路由的好處就介紹到這裡。
ThinkPHP5之頁面跳轉
頁面跳轉的方法 首先可以用簡單的success和error方法來實現 1.在index login下新建乙個login.html頁面 lang en charset utf 8 登陸title head 2.新建乙個login控制器 namespace usethink controller 繼承c...
ThinkPHP5使用快取
cache 使用復合快取型別 type complex 預設使用的快取 default 驅動方式 type file 在這設定換人的快取方式 快取儲存目錄 path cache path,檔案快取 file 驅動方式 type file 設定不同的快取儲存目錄 path runtime path f...
thinkphp5內建標籤
知道內建標籤怎麼用,查手冊的時候好查 卻功能的時候在裡面找著來用 1 內建標籤23 變數輸出使用普通標籤就足夠了,但是要完成其他的控制 迴圈和判斷功能,就需要借助模板引擎的標籤庫 4功能了,系統內建標籤庫的所有標籤無需引入標籤庫即可直接使用。5內建標籤包括 6標籤名作用包含屬性 7include 包...