模板 自定义view文件夹 中间件 路由和路由函数 自定义多个route文件 session无效 自定义多个公共函数 中间件别名和数据库连接 伪静态 自定义类库extends 以年月日+编号拼接id,且编号每天从0开始 跨域 宝塔面板新建网站403 网页包含过多重定向 缓存 路由绑定子域名 方法参数错误 php导出excel时身份证变成科学技术法 获取路由参数 生成二维码phpqrcode 使用腾讯OCR(扫描) thinkphp6微信支付回调不访问 查询构造器 导入导出excel:安装使用 导入导出Excel:按日期导出 tp6腾讯云短信 thinkphp unserialize(): Error chinese-calendar 将base64保存到本地

中间件

首页 > PHP > Thinkphp6 更新日期:2021-04-20 15:31:53

创建

在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']);

一对比,就知道哪个更方便了。


标题导航