路由參數(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版本以上,extdeny_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秒。

文檔最后更新時(shí)間:2018-04-25 18:44:45

文檔
目錄

深色
模式

切換
寬度