謝謝guoyuzhao的講解,大神。
可以為某個(gè)路由或者某個(gè)分組路由定義后置行為執(zhí)行翰铡,表示當(dāng)路由匹配成功后饵溅,執(zhí)行的行為妨退,例如:
Route::get('user/:id','index/User/read',[
'after_behavior'=>'\app\index\behavior\ReadInfo'
]);
其中\(zhòng)app\index\behavior\ReadInfo
行為類定義如下:
namespaceapp\index\behavior;
useapp\index\model\User;
classReadInfo{
public functionrun(){
$id =request()->route('id');
request()->user= User::get($id);
}
}
如果成功匹配到new/:id路由后,就會(huì)執(zhí)行行為類的run方法蜕企。
路由后置行為的run方法可以使用返回值咬荷,通過返回值數(shù)據(jù)可以直接更改當(dāng)前的路由地址,又或者返回Response對象直接進(jìn)行響應(yīng)輸出轻掩。
路由后置行為是一個(gè)URL訪問的第一步幸乒,因此通诚可以用來做一些全局性的攔截辛馆,比如權(quán)限驗(yàn)證之類。
示例:
use
think\Route;
Route::get('user/:id','index/User/read',[
'after_behavior'=>'\app\index\behavior\ReadInfo'
]);
-----------id作為參數(shù)被傳給index/User/read庆锦,但read執(zhí)行前會(huì)先執(zhí)行\(zhòng)app\index\behavior\ReadInfo丐重,因此在\app\index\behavior\ReadInfo中可以進(jìn)行驗(yàn)證權(quán)限之類的操作壳影。
namespace
app\index\controller;
use
think\Controller;
class User
extends Controller{
public function read(){
echo '1';
}
}
namespace
app\index\behavior;
class
ReadInfo {
public function run(){
$id =request()->route('id');
echo
$id."----------";
}
}
訪問
http://localhost/route/public/index.php/user/88
顯示
88----------1
------------
路由匹配成功后,首先執(zhí)行'after_behavior'=>'\app\index\behavior\ReadInfo'
即ReadInfo方法弥臼,返回$id."----------"宴咧,即[88----------]
再執(zhí)行user控制器的read方法,返回echo '1'径缅。
合起來就是:88----------1