ThinkPHP6全局中间件详解

时间:2020年10月28日

如果要说ThinkPHP5和ThinkPHP6有什么不同的话,我觉得最大的区别就是ThinkPHP6引入了中间件。


ThinkPHP6中间件的主要应用场景可以包括对HTTP请求的数据过滤、权限检测、请求拦截等行为,使用中间件能够让控制器的定义更加简单,很多额外的非核心业务流程的处理都可以交给中间件执行。


从中间件的使用范围来看,可以分为全局中间件、应用中间件、控制器中间件和路由中间件。下面我们将在tp6.0.3多应用环境下通过实例来演示一下诸中间件的应用。


中间件应用目标:验证在执行控制器的方法前,先执行中间件的handle方法


创建中间件


在项目的根目录执行下面命令行创建中间件AdminCheck类文件


php think make:middleware AdminCheck

建好的中间件如下图所示

\"360截图20201028205014560.jpg\"/



给中件件文件AdminCheck.php添加如下代码


declare (strict_types = 1);\n\nnamespace app\\middleware;\nuse think\\facade\\Session;\nclass AdminCheck\n{\n\n    /**\n     * 处理请求\n     *\n     * @param \\think\\Request $request\n     * @param \\Closure       $next\n     * @return Response\n     */\n    public function handle($request, \\Closure $next)\n    {\n        echo 'Before Middleware'.'<br>';\n\n        $response = $next($request);\n\n        return $response;\n    }\n}


注:中间件handle方法的返回值必须是一个Response对象。

我们在handle方法内添加了‘Before Middleware',就是为了验证在执行控制器的方法前,先执行中间件的handle方法。


配置中间件


因为使用的是多应用模式,所以我们要在admin应中下新建中间件配置文件middleware.php,然后往文件添加如下内容


// 中间件配置\nreturn [\n    \\app\\middleware\\AdminCheck::class,\n\n];


下面我们来看一下总体的文件结构,如下图所示

\"360截图20201028222938617.jpg\"/


代码调试


在admin应用下的控制器index.php(tp6.0.3\\app\\admin\\controller\\index.php)添加如下代码


namespace app\\admin\\controller;\n\nuse think\\Request;\nclass index\n{\n\n    /**\n     * 显示资源列表\n     *\n     * @return \\think\\Response\n     */\n    public function index()\n    {\n\n        $title = 'hello 君兰IT!';\n\n\n        return $title;\n\n    }


\"360截图20201028223647363.jpg\"/

根据预期结果,代码的运行顺序是先执行完中间AdminCheck.php的代码,然后才是控制器index.php的index方法。


运行结果如下

\"360截图20201028224242723.jpg\"/


符合预期。


小结:在多应用模式下,全局中间件一旦在某个应用中配置好如admin,程序执行的顺序是,先中间件后控制器。中间件比较典型的应用如后台的登录,权限控制等。


来源:君兰IT(QQ/微信:644828230),转载请注明出处!


本文地址:https://www.junlan365.com/show/id/11.html


最新文章
热点文章