ThinkPHP5

ThinkPHP5 路由后置行为

2017-09-24  本文已影响0人  wangshuxian

谢谢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访问的第一步,因此通常可以用来做一些全局性的拦截,比如权限验证之类。


示例:

'route_config_file'=> ['route','group'], group.php

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中可以进行验证权限之类的操作。


User.php

namespace

app\index\controller;

use

think\Controller;

class User

extends Controller{

public function read(){

echo '1';

}

}


ReadInfo.php

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


上一篇下一篇

猜你喜欢

热点阅读