在app/middleware目录下,新建一个php文件,文件名要与class类名相同,如例子的WebLogin.php
里面内容填写如下:
<?php
declare (strict_types = 1);
# 中间件的路径,本例子,该文件是建在middleware文件夹内的web目录下的。
namespace app\middleware\Web;
# 系统后台登录验证
class WebLogin
{
/**
* 处理请求
*
* @param \think\Request $request
* @param \Closure $next
* @return Response
*/
public function handle($request, \Closure $next)
{
……
return $next($request);
}
}
有两种注册方式——官方也没写明,让我踩了很多坑。
打开app目录下的middleware.php文件。
<?php
// 全局中间件定义文件
return [
// Session初始化
\app\middleware\Admin::class,
];
Admin就是中间件的名字。
打开config下的middleware.php文件。
<?php
// 中间件配置
return [
// 别名或分组
'alias' => [
# 后台登录验证
'slv'=>\app\middleware\System\SystemLoginVerify::class,
# 系统设置鉴权
'system'=>\app\middleware\System\System::class,
],
// 优先级设置,此数组中的中间件会按照数组中的顺序优先执行
'priority' => [],
];
在数组alias里,书写别名。例子里的slv,就是中间件SystemLoginVerify::class的别名。
区别在于使用方式上。 第一种的使用方式:
Route::get('/admin/:id', 'app\Controller\Admin\TaskList@Index')
->middleware([\app\middleware\Admin::class]);
第二种的使用方式:
Route::get('/admin/:id', 'app\Controller\Admin\TaskList@Index')
->middleware(['slv', 'system']);
一对比,就知道哪个更方便了。