Route 路由
在開啟本文之旅的前提,假設你已經配置好了域名以及相關的環境
所謂路由是指把資料從一個地方傳送到另一個地方的行為和動作,而路由器,正是執行這種行為動作的機器,它的英文名稱為Router,是一種連線多個網路或網段的網路裝置,它能將不同網路或網段之間的資料資訊進行“翻譯”,以使它們能夠相互“讀懂”對方的資料,從而構成一個更大的網路
URL的組成
我們以 http://www.tp5.com/index.php/index/index/show/id/10
為例
注意:引數列表是在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地址更簡短、更規範、更安全
下面先看一下兩種不同的路由模式
路由配置我們是知道怎麼回事了,那怎麼實現傳參呢?
推薦使用按順序解析,這樣可以使url更短,並且不會將引數名暴露在外。
路由的定義(路由註冊)
建立路由的規則
除了註冊路由規則的方式還有批量註冊路由,註冊快捷路由,註冊資源路由,註冊miss路由等別的方式。這些都是Route
類註冊路由的方式。
我們也可以使用return
陣列的方式,註冊路由。例如:
return [
'hello/:name'=>['index/hello', ['ext'=>'shtml'], ['name'=>'\w{2,}']],
];
- 路由表示式
路由表示式由靜態地址和動態變數組成。動態變數可分為以冒號開頭的必選變數,例如:id
可選變數[:name]
在方法的引數列表中有預設值。
- 路由地址
路由地址必須是真實合法有效的,路由地址不需要/
結尾,路由地址需從專案的入口檔案開始。
路由到模組/控制器/操作的流程,先完成模組初始化,再逐級解析操作,控制器,模組。而路由到控制器方法則是跳過模組初始化和模組控制器的解析,直接執行操作方法~~
- 請求型別
請求型別 | 用途 | 描述 | 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 |
- 變數規則