当前位置: 首页 > 后端技术 > PHP

Laravel流水线机制

时间:2023-03-29 19:12:43 PHP

1.后台业务复杂,功能逐层递进,每一层的业务复用率也很高。如果一切都按照传统用一种方法写,无论是代码的可读性,还是解耦性都比较差。如果此时有管道,可以随意添加修改这条管道,实现一个新的功能。说到管道机制,比较经典的案例就是中间件,也可以是aop(AspectOrientedProgramming),或者洋葱模式。2、代码一步步模拟各种业务classALogic{publicstaticfunctionhandle($data,$next){print"StartALogic";$ret=$next($data+1);打印“结束逻辑”;返回$ret;}}classBLogic{publicstaticfunctionhandle($data,$next){print"StartBLogic";$ret=$next($data+1);打印“结束B逻辑”;返回$ret;}}classCLogic{publicstaticfunctionhandle($data,$next){print"StartClogic";//$数据=$数据+1;$ret=$next($data+1);打印“结束C逻辑”;返回$ret;}}组装成一整块$pipes=[ALogic::class,BLogic::class,CLogic::class];调用公共函数handlefunctionsum($callable,$item){returnfunction($request)use($callable,$item){return$item::handle($request,$callable);};}implement$arr=array_reverse($pipes);//将数组倒置实现先进后出$result=array_reduce($arr,'sum',function($data){echo$data;});//返回一个闭包函数$result(1);//4三、Laravel实现了经典的\laravel\framework\src\Illuminate\Foundation\Http\Kernel.phpsendRequestThroughRouter这个方法return(newPipeline($this->app))->send($request)//传入的普通数据through->through($this->app->shouldSkipMiddleware()?[]:$this->middleware)//每一层的判断或处理->then($this->dispatchToRouter());//到达controller实现方法(这样理解可能更清楚)一个NewPipeline发送(send)request(publicdatainthrough)request,经过(through)Middleware,然后(then)提交给路由