這篇文章主要介紹了Thinkphp路由定義偽靜態規則的方法的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Thinkphp路由定義偽靜態規則的方法文章都會有所收獲,下面我們一起來看看吧。
Thinkphp 6.0路由定義 偽靜態規則
要使用Route
類注冊路由必須首先在路由定義文件開頭添加引用(后面不再重復說明)
use think\facade\Route;
最基礎的路由定義方法是:
Route::rule('路由表達式', '路由地址', '請求類型');
例如注冊如下路由規則(假設為單應用模式):
// 注冊路由到News控制器的read操作 Route::rule('new/:id','News/read');
我們訪問:
http://serverName/new/5
會自動路由到:
http://serverName/news/read/id/5
并且原來的訪問地址會自動失效。
可以在rule
方法中指定請求類型(不指定的話默認為任何請求類型有效),例如:
Route::rule('new/:id', 'News/update', 'POST');
請求類型參數不區分大小寫。
表示定義的路由規則在POST
請求下才有效。如果要定義GET
和POST
請求支持的路由規則,可以用:
Route::rule('new/:id','News/read','GET|POST');
不過通常我們更推薦使用對應請求類型的快捷方法,包括:
類型 | 描述 | 快捷方法 |
---|---|---|
GET | GET請求 | get |
POST | POST請求 | post |
PUT | PUT請求 | put |
DELETE | DELETE請求 | delete |
PATCH | PATCH請求 | patch |
* | 任何請求類型 | any |
快捷注冊方法的用法為:
Route::快捷方法名('路由表達式', '路由地址');
使用示例如下:
Route::get('new/<id>','News/read'); // 定義GET請求路由規則 Route::post('new/<id>','News/update'); // 定義POST請求路由規則 Route::put('new/:id','News/update'); // 定義PUT請求路由規則 Route::delete('new/:id','News/delete'); // 定義DELETE請求路由規則 Route::any('new/:id','News/read'); // 所有請求都支持的路由規則
注冊多個路由規則后,系統會依次遍歷注冊過的滿足請求類型的路由規則,一旦匹配到正確的路由規則后則開始執行最終的調度方法,后續規則就不再檢測。
規則表達式通常包含靜態規則和動態規則,以及兩種規則的結合,例如下面都屬于有效的規則表達式:
Route::rule('/', 'index'); // 首頁訪問路由 Route::rule('my', 'Member/myinfo'); // 靜態地址路由 Route::rule('blog/:id', 'Blog/read'); // 靜態地址和動態地址結合 Route::rule('new/:year/:month/:day', 'News/read'); // 靜態地址和動態地址結合 Route::rule(':user/:blog_id', 'Blog/read'); // 全動態地址
規則表達式的定義以
/
為參數分割符(無論你的PATH_INFO
分隔符設置是什么,請確保在定義路由規則表達式的時候統一使用/
進行URL參數分割,除非是使用組合變量的情況)。
每個參數中可以包括動態變量,例如:變量
或者<變量>
都表示動態變量(新版推薦使用第二種方式,更利于混合變量定義),并且會自動綁定到操作方法的對應參數。
你的URL訪問
PATH_INFO
分隔符使用pathinfo_depr
配置,但無論如何配置,都不影響路由的規則表達式的路由分隔符定義。
支持對路由參數的可選定義,例如:
Route::get('blog/:year/[:month]','Blog/archive'); // 或者 Route::get('blog/<year>/<month?>','Blog/archive');
變量用[ ]
包含起來后就表示該變量是路由匹配的可選變量。
以上定義路由規則后,下面的URL訪問地址都可以被正確的路由匹配:
http://serverName/index.php/blog/2015 http://serverName/index.php/blog/2015/12
采用可選變量定義后,之前需要定義兩個或者多個路由規則才能處理的情況可以合并為一個路由規則。
可選參數只能放到路由規則的最后,如果在中間使用了可選參數的話,后面的變量都會變成可選參數。
規則匹配檢測的時候默認只是對URL從頭開始匹配,只要URL地址開頭包含了定義的路由規則就會匹配成功,如果希望URL進行完全匹配,可以在路由表達式最后使用$
符號,例如:
Route::get('new/:cate$', 'News/category');
這樣定義后
http://serverName/index.php/new/info
會匹配成功,而
http://serverName/index.php/new/info/2
則不會匹配成功。
如果是采用
Route::get('new/:cate', 'News/category');
方式定義的話,則兩種方式的URL訪問都可以匹配成功。
如果需要全局進行URL完全匹配,可以在路由配置文件中設置
// 開啟路由完全匹配 'route_complete_match' => true,
開啟全局完全匹配后,如果需要對某個路由關閉完全匹配,可以使用
Route::get('new/:cate', 'News/category')->completeMatch(false);
在路由跳轉的時候支持額外傳入參數對(額外參數指的是不在URL里面的參數,隱式傳入需要的操作中,有時候能夠起到一定的安全防護作用,后面我們會提到)。例如:
Route::get('blog/:id','blog/read') ->append(['status' => 1, 'app_id' =>5]);
上面的路由規則定義中status
和app_id
參數都是URL里面不存在的,屬于隱式傳值??梢葬槍Σ煌穆酚稍O置不同的額外參數。
如果
append
方法中的變量和路由規則存在沖突的話,append方法傳入的優先。
如果你需要快速的根據路由生成URL地址,可以在定義路由的時候指定生成標識(但要確保唯一)。
例如
// 注冊路由到News控制器的read操作 Route::rule('new/:id','News/read') ->name('new_read');
生成路由地址的時候就可以使用
url('new_read', ['id' => 10]);
如果不定義路由標識的話,系統會默認使用路由地址作為路由標識,例如可以使用下面的方式生成
url('News/read', ['id' => 10]);
在路由配置文件中設置
'url_route_must' => true,
將開啟強制使用路由,這種方式下面必須嚴格給每一個訪問地址定義路由規則(包括首頁),否則將拋出異常。
首頁的路由規則采用/
定義即可,例如下面把網站首頁路由輸出Hello,world!
Route::get('/', function () { return 'Hello,world!'; });
關于“Thinkphp路由定義偽靜態規則的方法”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Thinkphp路由定義偽靜態規則的方法”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。