admin 发表于 2021-1-10 18:10:22

thinkphp 中间件的作用的意义

减少了系统的一些if/else判断,因此降低了系统的耦合
这好象是关键吧,实际就是把一些判断解耦到了中间件里去做。




thinkphp中间件是什么?有什么作用?

中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理。---tp5.1手册

也就是说,降低了系统的耦合;【在http请求阶段,执行中间件的入口执行方法(handle)--tp5.1】----减少了系统的一些if/else判断,因此降低了系统的耦合
中间件可以实现什么功能,例如权限验证,访问记录,重定向等等。-----这些业务的存在降低了耦合.




记一次控制器中间件的使用


遇到的场景在一个商城网站中,对一个商品进行修改的操作有:编辑、上下架、审核、设置是否热门、设置是否促销等。现在有个需求是:不允许修改状态是已经失效的商品。
简单粗暴的方法一个最直接的方法是,在每个可能的操作前面添加相应的判断,如果发现商品失效,就返回一个提示。这样,你就必须修改每个可能的方法。
使用中间件使用中间件来实现该需求是最好不过了,你不必修改其中的任何一个方法,只需要创建一个控制器中间件,添加业务逻辑,配置哪些操作需要中间件过滤,一切搞定。
实施步骤
[*]创建一个中间件
在项目跟目录下,命令行运行 php think make:middleware Check,这将会在 application 目录下,创建 http/middleware 文件夹(如果没有的话),同时,生成一个中间件文件 Check.php,其代码如下:<?phpnamespace app\http\middleware;class Check{    public function handle($request, \Closure $next, $name)    {      return $next($request);    }}
接着,在中间件的 handle 方法添加具体的业务逻辑,大概是这样子的:public function handle($request, \Closure $next, $name){    if ($id = $request->param('id')) {      $result = \think\Db::name('goods')->where([['id', '=', $id, ['status', '=', 0)->find();      if ($result) {            // 发现商品已经失效,返回一个提示数据,或者进行重定向等操作         // 比如:          // return \think\Response::create(['status' => 0, 'msg' => '该商品不能编辑哦'],'json');      }}    return $next($request);}
[*]配置控制器中间件
在需要用到该中间件的控制器所在的文件夹下,创建一个 middleware.php 文件,写入如下代码:return [   app\http\middleware\Check::class;
[*]在需要中间件的控制器添加 middleware 属性,代码示例如下:protected $middlewate = ['Check' => ['only' => ['actionA', 'actionB', 'actionC';
这样一个控制器中间件就完成了。以后如果有某些方法需要加进去验证,或者从验证中去掉,只需要修改该属性就可以了。


页: [1]
查看完整版本: thinkphp 中间件的作用的意义