路由定義
| 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
並且原來的訪問地址會自動失效。
快捷方式注冊
- 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'); // 所有請求都支持的路由規則
注冊多個路由規則后,系統會依次遍歷注冊過的滿足請求類型的路由規則,一旦匹配到正確的路由規則后則開始執行最終的調度方法,后續規則就不再檢測。id 可以通過函數參數獲取,也可通過request()->param()獲取
路由表達式
規則表達式
通常包含靜態地址和動態地址,或者兩種地址的結合,例如下面都屬於有效的規則表達式:
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'); //變量用 [ ] 包含起來后就表示該變量是路由匹配的可選變量
下面的URL訪問地址都可以被正確的路由匹配:
http://serverName/index.php/blog/2015
http://serverName/index.php/blog/2015/12
注:可選參數只能放到路由規則的最后,如果在中間使用了可選參數的話,后面的變量都會變成可選參數。
完全匹配
如果希望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完全匹配,可以在 app.php 中設置
// 開啟路由完全匹配
'route_complete_match' => true,
額外參數
在路由跳轉的時候支持額外傳入參數對(額外參數指的是不在URL里面的參數,隱式傳入需要的操作中,有時候能夠起到一定的安全防護作用,后面我們會提到)。例如:
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');
因為后者更符合語義。

