表述一下你对thinkphp6/thinkphp8中间件的理解

发布于 2019-12-03 14:52:05

thinkphp6/8中间件 的出现原因?存在的意义?如何使用?....

查看更多

浏览量
1904
3 个回答
猫哥
猫哥 项目组成员 2019-12-06
希望我的回答能对你有所帮助
//一个中间件示例
class Check
{
    public function handle($request, \Closure $next)
    {
        //中间件前置执行操作
        $response = $next($request);
        //中间件后置执行操作
        
        return $response;
    }
}

thinkphp6中间件的参数和操作基本上是围绕$request请求类对象操作的,所以中间件主要用于拦截或过滤应用的HTTP请求,包括Session功能、请求缓存和多语言功能等.

猫哥
猫哥 项目组成员 2024-04-21
希望我的回答能对你有所帮助

中间件的实现过程用到一个很重要的设计模式:

管道(Pipeline): 它的作用是将数据通过一系列的处理操作,得到最终的目标结果.就像一条蛋糕流水线作业,一开始只有一个烤好的蛋糕胚体,然后不断给他添加各种装饰,最终得到了想要的蛋糕.
执行逻辑:
  1. 创建一个管道对象, $Pipeline = app(Pipeline::class);
  2. 定义处理步骤:
$middleware = [
    function($data,$next){$data['step1'] = 'process 1'; return $next($data);},
    function($data,$next){$data['step2'] = 'process 2'; return $next($data);},
];
  1. 管道开始作业: $Pipeline->send([])->through($middleware)->thenReturn(); send()方法初始化管道数据, thenReturn()方法处理收尾工作;
猫哥
猫哥 项目组成员 2024-04-21
希望我的回答能对你有所帮助

thinkphp6/8 中间件的关键是了解指谁的中间:

HTTP应用执行的过程的中间

在执行启动HttpRun事件监听后,知道启动HttpEnd事件监听为止,这中间的关键节点对 Request对象进行控制调整拦截, 这里面主要知识是俩个地方: 哪些关键点, 如何进行拦截处理

哪些中间件拦截点(一个拦截点是可以方多个中间件的,依次执行)?

  1. 全局中间件: 在HttpRun事件之后就开始介入,就是一切的开始最开始的地方就介入了. 在app/middleware.php文件中定义.
  2. 应用级中间件: 多应用模块时候在 app/someapp/middleware.php 中定义
  3. 路由中间件: 在路由调度的时候拦截,Route::rule('hello/:name','hello')->middleware(\app\middleware\Auth::class);,先判断了权限然后再完成路由跳转.
  4. 控制器中间件: 控制器定义成员属性$middleware=['auth'];即可再方法执行前先进行中间件拦截处理,比如对$request对象添加一个新的成员属性,$request->device = 'weixin';
  5. 回调中间件: 在中间件类中定义 public function end(){};即可在HttpEnd事件之后执行中间件end回调.

学习
记录

发布
问题

分享
好友

手机
浏览

扫码手机浏览