怎么实现laravel管道及中间件源码分析

怎么实现laravel管道及中间件源码分析

今天就跟大家聊聊有关怎么实现laravel管道及中间件源码分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

通过一个简单的实例让我们熟悉关于 laravel 管道及中间件的实现过程。

管道(包洋葱的概念)在laravel 中是将要执行的控制器的方法做为洋葱心,而多个中间件(中间件提供了一种方便的机制过滤进入应用程序的 HTTP 请求。)做为洋葱皮的概念。
核心知识点:返回闭包函数、开始包洋葱: array_reduce()

直接上代码了

<?php/***[管道(包洋葱的概念)*在laravel中是将要执行的控制器的方法做为洋葱心,*而多个中间件(中间件提供了一种方便的机制过滤进入应用程序的HTTP请求。)做为洋葱皮的概念]**核心知识点:返回闭包函数、开始包洋葱:array_reduce()**@Authorleeprince:2020-03-1700:59*//***[中间件-Middleware01]**@Authorleeprince:2020-03-1701:03*/classMiddleware01{publicstaticfunctionhandle(Closure$next){var_dump('Middleware01-我是控制器的前置操作');$next();var_dump('Middleware01-我是控制器的后置操作');}}/***[中间件-Middleware02]**@Authorleeprince:2020-03-1701:03*/classMiddleware02{publicstaticfunctionhandle(Closure$next){var_dump('Middleware02-我是控制器的前置操作');$next();var_dump('Middleware02-我是控制器的后置操作');}}/***[中间件-Middleware03]**@Authorleeprince:2020-03-1701:03*/classMiddleware03{publicstaticfunctionhandle(Closure$next){var_dump('Middleware03-我是控制器的前置操作');$next();var_dump('Middleware03-我是控制器的后置操作');}}ClassController{publicstaticfunctionindex(){var_dump('我是控制器');}}/***[管道]**@Authorleeprince:2020-03-1701:09*/classPipeline{//管道类的数组-即存放中间件protected$pipes=['Middleware01','Middleware02','Middleware03',];/***[运行带有最终目标(洋葱心,即控制器的方法)回调的管道。]**@Authorleeprince:2020-03-1701:15*@paramClosure$destination*@returnmixed*/publicfunctionthen(Closure$destination){$pipeline=array_reduce(array_reverse($this->pipes),$this->carry(),$this->prepareDestination($destination));return$pipeline();}/***[获取最后一块闭合的洋葱心,即控制器的方法]**@Authorleeprince:2020-03-1701:29*@paramClosure$destination*@returnmixed*/publicfunctionprepareDestination(Closure$destination){returnfunction()use($destination){return$destination();};}/***[获取一个代表洋葱切片的闭包。]**@Authorleeprince:2020-03-1701:24*@returnClosure*/protectedfunctioncarry(){returnfunction($stack,$pipe){returnfunction()use($stack,$pipe){return$pipe::handle($stack);};};}}//调用管道$pipe=newPipeline();$pipe->then(function(){return(newController())->index();});

执行结果

看完上述内容,你们对怎么实现laravel管道及中间件源码分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注恰卡编程网行业资讯频道,感谢大家的支持。

发布于 2021-12-28 22:16:24
收藏
分享
海报
0 条评论
38
上一篇:golang微服务框架中如何扩展go-zero使之支持html模板解析自动化 下一篇:如何进行flowable工作流引擎Table 'flowable.act_ge_property' doesn't exist 问题分析
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码