ThinkPHP 路由

zs4336發表於2019-12-11

Route 路由

在開啟本文之旅的前提,假設你已經配置好了域名以及相關的環境

所謂路由是指把資料從一個地方傳送到另一個地方的行為和動作,而路由器,正是執行這種行為動作的機器,它的英文名稱為Router,是一種連線多個網路或網段的網路裝置,它能將不同網路或網段之間的資料資訊進行“翻譯”,以使它們能夠相互“讀懂”對方的資料,從而構成一個更大的網路

URL的組成

我們以 http://www.tp5.com/index.php/index/index/show/id/10 為例
url

注意:引數列表是在url引數配置 'url_param_type' => 0 的前提下

路由的模式

TP5已經廢棄傳統URL模式,全部採用PATH_INFO模式

模式 舉例
傳統URL模式 http://www.tp5.com/index.php?m=index&c...
PATH_INFO模式 http://www.tp5.com/index.php/index/index/s...

關於怎麼隱藏入口檔案 index.php,在此就不再敘述,可以參考官方文件

PATH_INFO模式的優點:

  • 縮短了URL
  • 與靜態網頁地址幾乎完全一樣,這樣就達到了欺騙搜尋引擎,提高網頁收錄效果,利於網站優化與推廣

開啟路由

瞭解了PATH_INFO模式的URL的優點之後,但還是覺得url長,不是那麼的優雅,我們可以藉助路由功能實現更加簡短,辨識度高的url。比如上面提到的url可以簡化為http://www.tp5.com/show/10
TP5.1版本的配置與TP5的配置檔案稍有不同。我使用的版本是v5.1.39 LTS。版本預設URL是使用混合模式,也就是同時支援PATH_INFO模式。
那為什麼推薦使用路由呢?因為使用路由使URL地址更簡短、更規範、更安全

下面先看一下兩種不同的路由模式
router

路由配置我們是知道怎麼回事了,那怎麼實現傳參呢?
urlParam
推薦使用按順序解析,這樣可以使url更短,並且不會將引數名暴露在外。

路由的定義(路由註冊)

建立路由的規則

rule

除了註冊路由規則的方式還有批量註冊路由,註冊快捷路由,註冊資源路由,註冊miss路由等別的方式。這些都是Route類註冊路由的方式。
我們也可以使用return陣列的方式,註冊路由。例如:

return [
    'hello/:name'=>['index/hello', ['ext'=>'shtml'], ['name'=>'\w{2,}']],
];
  • 路由表示式

路由表示式由靜態地址和動態變數組成。動態變數可分為以冒號開頭的必選變數,例如:id 可選變數[:name]在方法的引數列表中有預設值。

expression

  • 路由地址

路由地址必須是真實合法有效的,路由地址不需要/結尾,路由地址需從專案的入口檔案開始。

address

路由到模組/控制器/操作的流程,先完成模組初始化,再逐級解析操作,控制器,模組。而路由到控制器方法則是跳過模組初始化和模組控制器的解析,直接執行操作方法~~

  • 請求型別
請求型別 用途 描述 URL格式
GET 從伺服器端獲取資料 僅查詢,不修改,類似:SELECT操作 URL?參數列
POST 在伺服器端建立資料 提交併建立新資訊,類似:INSERT操作 URL
PUT 改變伺服器端資料 僅修改不建立,類似:UPDATE操作 URL?參數列
DELETE 刪除伺服器端資源 根據條件刪除資料,類似:DELETE URL?參數列
  • 路由引數

路由引數主要完成路由匹配檢測以及行為執行
路由引數可以在定義路由規則的時候直接傳入(批量),不過5.1採用了更加物件導向的方式進行路由引數配置,因此使用方法配置更加清晰

引數 說明 方法名
method 請求型別檢測,支援多個請求型別 method
ext URL字尾檢測,支援匹配多個字尾 ext
deny_ext URL禁止字尾檢測,支援匹配多個字尾 denyExt
https 檢測是否https請求 https
domain 域名檢測 domain
before 前置行為(檢測) before
after 後置行為(執行) after
merge_extra_vars 合併額外引數 mergeExtraVars
complete_match 是否完整匹配路由 completeMatch
model 繫結模型 model
cache 請求快取 cache
param_depr 路由引數分隔符 depr
ajax Ajax檢測 ajax
pjax Pjax檢測 pjax
response 繫結response_send行為 response
validate 繫結驗證器類進行資料驗證 validate
header 設定Response的header資訊 header
append 追加額外的引數(5.1.5+) append
middleware 註冊路由中介軟體(5.1.6+) middleware
merge_rule_regex 合併路由規則(V5.1.6+) mergeRuleRegex
filter 請求變數過濾(V5.1.16+) filter
  • 變數規則

Qr1SZ8

趁還沒掉光,趕緊給每根頭髮起個名字吧~

相關文章