在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']);一对比,就知道哪个更方便了。