| Route::rule('路由表達式','路由地址','請求類型'); > route 目錄下的任何路由定義文件都是有效的,默認的路由定義文件是 route.php > 能夠更改文件名,或者添加多個路由定義文件(你能夠進行模塊定義區分,但最終都會一塊兒加載)。 > 請求類型參數不區分大小寫。
註冊路由到index模塊的News控制器的read操做 | Route::rule('new/:id','index/News/read'); 咱們訪問: | http://serverName/new/5 會自動路由到: | http://serverName/index/news/read/id/5 而且原來的訪問地址會自動失效。
| 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'); // 全部請求都支持的路由規則php
註冊多個路由規則後,系統會依次遍歷註冊過的知足請求類型的路由規則,一旦匹配到正確的路由規則後則開始執行最終的調度方法,後續規則就再也不檢測。id 能夠經過函數參數獲取,也可經過request()->param()獲取thinkphp
一般包含靜態地址和動態地址,或者兩種地址的結合,例以下面都屬於有效的規則表達式:安全
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參數分割,除非是使用組合變量的狀況);app
每一個參數中以 : 開頭的參數都表示動態變量,而且會自動綁定到操做方法的對應參數;函數
URL訪問 PATH_INFO 分隔符使用 pathinfo_depr 配置,但不管如何配置,都不影響路由的規則表達式的路由分隔符定義。thinkphp5
支持對路由參數的可選定義,例如:post
Route::get('blog/:year/[:month]','Blog/archive'); //變量用 [ ] 包含起來後就表示該變量是路由匹配的可選變量
下面的URL訪問地址均可以被正確的路由匹配:
http://serverName/index.php/blog/2015
http://serverName/index.php/blog/2015/12
注:可選參數只能放到路由規則的最後,若是在中間使用了可選參數的話,後面的變量都會變成可選參數。 url
若是但願URL進行徹底匹配,能夠在路由表達式最後使用 $ 符號,例如:spa
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徹底匹配,能夠在 app.php 中設置 // 開啓路由徹底匹配 'route_complete_match' => true,
在路由跳轉的時候支持額外傳入參數對(額外參數指的是不在URL裏面的參數,隱式傳入須要的操做中,有時候可以起到必定的安全防禦做用,後面咱們會提到)。例如:code
Route::get('blog/:id','blog/read?status=1&app_id=5');
上面的路由規則定義中額外參數的傳值方式都是等效的。 status 和 app_id 參數都是URL裏面不存在的,屬於隱式傳值,固然並不必定須要用到,只是在須要的時候可使用。參數值能夠經過request()->param()獲取。
若是你須要快速的根據路由生成URL地址,能夠在定義路由的時候指定生成標識(但要確保惟一)。
// 註冊路由到index模塊的News控制器的read操做 Route::name('new_read')->rule('new/:id','index/News/read'); 生成路由地址的時候就可使用 url('new_read',['id'=>10]); 若是不定義路由標識的話,使用下面的方式生成 url('index/News/read',['id'=>10]); V5.1.6+ 版本開始,路由標識的用法調整,原來的用法: // 註冊路由到index模塊的News控制器的read操做 Route::name('new_read')->rule('new/:id','index/News/read'); 須要改成: // 註冊路由到index模塊的News控制器的read操做 Route::rule('new/:id','index/News/read')->name('new_read'); 由於後者更符合語義。