ThinkPHP6全局中间件详解
时间:2020年10月28日
如果要说ThinkPHP5和ThinkPHP6有什么不同的话,我觉得最大的区别就是ThinkPHP6引入了中间件。
ThinkPHP6中间件的主要应用场景可以包括对HTTP请求的数据过滤、权限检测、请求拦截等行为,使用中间件能够让控制器的定义更加简单,很多额外的非核心业务流程的处理都可以交给中间件执行。
从中间件的使用范围来看,可以分为全局中间件、应用中间件、控制器中间件和路由中间件。下面我们将在tp6.0.3多应用环境下通过实例来演示一下诸中间件的应用。
中间件应用目标:验证在执行控制器的方法前,先执行中间件的handle方法
创建中间件
在项目的根目录执行下面命令行创建中间件AdminCheck类文件
php think make:middleware AdminCheck
建好的中间件如下图所示
给中件件文件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];
下面我们来看一下总体的文件结构,如下图所示
代码调试
在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 }
根据预期结果,代码的运行顺序是先执行完中间AdminCheck.php的代码,然后才是控制器index.php的index方法。
运行结果如下
符合预期。
小结:在多应用模式下,全局中间件一旦在某个应用中配置好如admin,程序执行的顺序是,先中间件后控制器。中间件比较典型的应用如后台的登录,权限控制等。
来源:君兰IT(QQ/微信:644828230),转载请注明出处!
本文地址:https://www.junlan365.com/show/id/11.html