Thinkphp6.0中间件.下

本文介绍了如何创建和使用路由及控制器中间件进行权限验证。通过创建自定义中间件,如`Auth`和`Check`,并在路由定义中应用,可以实现对特定路由的访问控制。此外,可以在配置文件中设置中间件别名,支持多个中间件的链式调用,并且可以向中间件传递参数。对于控制器中间件,可以注册在控制器级别,限制特定操作方法的执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节课我们来学习一下要使用一下路由中间件,以及控制器中间件。

一.路由中间件

1. 创建一个给路由使用的中间件,判断路由的 ID 值实现相应的验证;
class Auth
{
public function handle($request, \Closure $next)
{
if ($request->param('id') == 10) {
echo '是管理员!';
}
return $next($request);
}
}

1. 路由方法提供了一个 middleware()方法,让指定的路由采用指定的中间件;
Route::rule('ar/:id', 'Address/read')
->middleware(\app\middleware\Auth::class);
->middleware([Auth::class, Check::class]);
//支持多个中间件,这里 use 了

2. 也可以在 config/middleware.php 配置文件加中,配置别名支持;
'alias'
=> [
'Auth' => app\middleware\Auth::class,
'Check' => app\middleware\Check::class,
],
->middleware(['Auth', 'Check']);

3. 可以给中间件传递额外参数,通过中间件入口方法的第三个参数接收;
->middleware(Auth::class, 'ok');
public function handle($request, \Closure $next, $param, $param = '')

4. 中间件也支持分组路由,闭包路由等;
Route::group('ar', function () {
Route::rule(':id', 'Address/read')
})->middleware(Auth::class);
Route::rule('ar/:id', 'Address/read')
->middleware(function ($request, \Closure $next) {
if ($request->param('id') == 10) {
echo '是管理员!';
}
return $next($request);
});

二.控制器中间件

1. 可以让中间件在控制器里注册,让这个控制器执行的时候执行中间件;
protected $middleware = ['Check'];

2. 默认情况下,控制器中间件对所有操作方法有效,支持做限制;
protected $middleware = [
'Auth' => ['only'
=>['index']],
'Check' => ['except'
=>['read']],
];

3. 中间件给控制器传递参数,通过 Request 对象实现;
$request->name = 'Mr.Lee';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值