路由參數(shù)
路由參數(shù)
路由參數(shù)是指可以設(shè)置一些路由匹配的條件參數(shù),主要用于驗證當(dāng)前的路由規(guī)則是否有效,主要包括:
參數(shù) | 說明 |
---|---|
method | 請求類型檢測,支持多個請求類型 |
ext | URL后綴檢測,支持匹配多個后綴 |
deny_ext | URL禁止后綴檢測,支持匹配多個后綴 |
https | 檢測是否https請求 |
domain | 域名檢測 |
before_behavior | 前置行為(檢測) |
after_behavior | 后置行為(執(zhí)行) |
callback | 自定義檢測方法 |
merge_extra_vars | 合并額外參數(shù) |
bind_model |
綁定模型(V5.0.1+ ) |
cache |
請求緩存(V5.0.1+ ) |
param_depr |
路由參數(shù)分隔符(V5.0.2+ ) |
ajax |
Ajax檢測(V5.0.2+ ) |
pjax |
Pjax檢測(V5.0.2+ ) |
V5.0.3+
版本對ajax
/pjax
/https
條件支持false
。
這些路由參數(shù)可以混合使用,只要有任何一條參數(shù)檢查不通過,當(dāng)前路由就不會生效,繼續(xù)檢測后面的路由規(guī)則。
請求類型
如果指定請求類型注冊路由的話,無需設(shè)置method
請求類型參數(shù)。如果使用了rule
或者any
方法注冊路由,或者使用路由配置定義文件的話,可以單獨(dú)使用method
參數(shù)進(jìn)行請求類型檢測。
使用方法:
// 檢測路由規(guī)則僅GET請求有效
Route::any('new/:id','News/read',['method'=>'get']);
// 檢測路由規(guī)則僅GET和POST請求有效
Route::any('new/:id','News/read',['method'=>'get|post']);
URL后綴
// 定義GET請求路由規(guī)則 并設(shè)置URL后綴為html的時候有效
Route::get('new/:id','News/read',['ext'=>'html']);
支持匹配多個后綴,例如:
Route::get('new/:id','News/read',['ext'=>'shtml|html']);
可以設(shè)置禁止訪問的URL后綴,例如:
// 定義GET請求路由規(guī)則 并設(shè)置禁止URL后綴為png、jpg和gif的訪問
Route::get('new/:id','News/read',['deny_ext'=>'jpg|png|gif']);
V5.0.7
版本以上,ext
和deny_ext
參數(shù)允許設(shè)置為空,分別表示不允許任何后綴以及必須使用后綴訪問。
域名檢測
支持使用完整域名或者子域名進(jìn)行檢測,例如:
// 完整域名檢測 只在news.thinkphp.cn訪問時路由有效
Route::get('new/:id','News/read',['domain'=>'news.thinkphp.cn']);
// 子域名檢測
Route::get('new/:id','News/read',['domain'=>'news']);
HTTPS檢測
支持檢測當(dāng)前是否HTTPS訪問
Route::get('new/:id','News/read',['https'=>true]);
前置行為檢測
支持使用行為對路由進(jìn)行檢測是否匹配,如果行為方法返回false表示當(dāng)前路由規(guī)則無效。
Route::get('user/:id','index/User/read',['before_behavior'=>'\app\index\behavior\UserCheck']);
行為類定義如下:
namespace app\index\behavior;
class UserCheck
{
public function run()
{
if('user/0'==request()->url()){
return false;
}
}
}
后置行為執(zhí)行
可以為某個路由或者某個分組路由定義后置行為執(zhí)行,表示當(dāng)路由匹配成功后,執(zhí)行的行為,例如:
Route::get('user/:id','User/read',['after_behavior'=>'\app\index\behavior\ReadInfo']);
其中\(zhòng)app\index\behavior\ReadInit 行為類定義如下:
namespace app\index\behavior;
use app\index\model\User;
class ReadInfo {
public function run(){
$id = request()->route('id');
request()->user = User::get($id);
}
}
如果成功匹配到new/:id
路由后,就會執(zhí)行行為類的run方法,參數(shù)是路由地址,可以動態(tài)改變。
Callback檢測
也可以支持使用函數(shù)檢測路由,如果函數(shù)返回false則表示當(dāng)前路由規(guī)則無效,例如:
Route::get('new/:id','News/read',['callback'=>'my_check_fun']);
合并額外參數(shù)
通常用于完整匹配的情況,如果有額外的參數(shù)則合并作為變量值,例如:
Route::get('new/:name$','News/read',['merge_extra_vars'=>true]);
http://serverName/new/thinkphp/hello
會被匹配到,并且name
變量的值為 thinkphp/hello
。
配置文件中添加路由參數(shù)
如果使用配置文件的話,可以使用:
return [
'blog/:id' => ['Blog/update',['method' => 'post','ext'=>'html|shtml']],
];
路由綁定模型(V5.0.1
)
可以在當(dāng)前路由匹配后綁定模型,后面則同過方法的對象自動注入來獲取。
Route::get('new/:name$','News/read',['bind_model'=>['User','name']]);
更多細(xì)節(jié)可以參考請求->依賴注入。
緩存路由請求
可以對當(dāng)前的路由請求進(jìn)行緩存處理,例如:
Route::get('new/:name$','News/read',['cache'=>3600]);
表示對當(dāng)前路由請求緩存3600秒。