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