谢谢guoyuzhao的讲解,大神。
可以为某个路由或者某个分组路由定义后置行为执行,表示当路由匹配成功后,执行的行为,例如:
Route::get('user/:id','index/User/read',[
'after_behavior'=>'\app\index\behavior\ReadInfo'
]);
其中\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路由后,就会执行行为类的run方法。
路由后置行为的run方法可以使用返回值,通过返回值数据可以直接更改当前的路由地址,又或者返回Response对象直接进行响应输出。
路由后置行为是一个URL访问的第一步,因此通常可以用来做一些全局性的拦截,比如权限验证之类。
示例:
use
think\Route;
Route::get('user/:id','index/User/read',[
'after_behavior'=>'\app\index\behavior\ReadInfo'
]);
-----------id作为参数被传给index/User/read,但read执行前会先执行\app\index\behavior\ReadInfo,因此在\app\index\behavior\ReadInfo中可以进行验证权限之类的操作。
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
------------
路由匹配成功后,首先执行'after_behavior'=>'\app\index\behavior\ReadInfo'
即ReadInfo方法,返回$id."----------",即[88----------]
再执行user控制器的read方法,返回echo '1'。
合起来就是:88----------1