日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP Pipeline 實現中間件的示例代碼

瀏覽:231日期:2022-09-10 16:11:52

Pipeline 設計模式

水管太長,只要有一處破了,就會漏水了,而且不利于復雜環境彎曲轉折使用。所以我們都會把水管分成很短的一節一節管道,然后最大化的讓管道大小作用不同,因地制宜,組裝在一起,滿足各種各樣的不同需求。

由此得出 Pipeline 的設計模式,就是將復雜冗長的流程 (processes) 截成各個小流程,小任務。每個最小量化的任務就可以復用,通過組裝不同的小任務,構成復雜多樣的流程 (processes)。

最后將「輸入」引入管道,根據每個小任務對輸入進行操作 (加工、過濾),最后輸出滿足需要的結果。

你可以拿koa的中間件機制來做參考 ,也就是我們常說的削洋蔥思路

PHP Pipeline 實現中間件的示例代碼

在前端里早期有一個工程打包工具gulp寫法就更能體現pipeline

gulp.task(’css’, function(){ return gulp.src(’client/templates/*.less’) .pipe(less()) .pipe(minifyCSS()) .pipe(gulp.dest(’build/css’))});gulp.task(’js’, function(){ return gulp.src(’client/javascript/*.js’) .pipe(sourcemaps.init()) .pipe(concat(’app.min.js’)) .pipe(sourcemaps.write()) .pipe(gulp.dest(’build/js’))});gulp.task(’default’, [ ’html’, ’css’, ’js’ ]);

IlluminatePipeline

Laravel 框架中的中間件,就是利用 IlluminatePipeline 來實現的,本來想寫寫我對 「Laravel 中間件」源碼的解讀,但發現網上已經有很多帖子都有表述了,所以本文就簡單說說如何使用 IlluminatePipeline。

public function demo(Request $request){ $pipe1 = function ($payload, Closure $next) { $payload = $payload + 1; return $next($payload); }; $pipe2 = function ($payload, Closure $next) { $payload = $payload * 3; return $next($payload); }; $data = $request->input(’data’, 0); $pipeline = new Pipeline(); return $pipeline ->send($data) ->through([$pipe1, $pipe2]) ->then(function ($data) { return $data; });}

今天主要學習學習「Pipeline」,順便推薦一個 PHP 插件:league/pipeline。

composer require league/pipeline

使用起來也很方便

use LeaguePipelinePipeline;class TimesTwoStage{ public function __invoke($payload) { return $payload * 2; }}class AddOneStage{ public function __invoke($payload) { return $payload + 1; }}$pipeline = (new Pipeline) ->pipe(new TimesTwoStage) ->pipe(new AddOneStage);// Returns 21$pipeline->process(10);

接下來我們添加FastRouter在我的項目中使用。

PHP Pipeline 實現中間件的示例代碼

上面的代碼修改成這樣

PHP Pipeline 實現中間件的示例代碼

我們接下來看看 RespondJson 里做了什么.

<?phpnamespace PlatappsMiddlewares;class RespondJson{ public function __invoke($payload) { header(’Content-type:text/json’); return $payload; }}

就簡單的加了個 header

我們試試把注釋到一個渠道

PHP Pipeline 實現中間件的示例代碼

我們再次訪問的時候就變成

PHP Pipeline 實現中間件的示例代碼

當然這是很簡單的中間件,這種中間件遠遠不夠,這里是核心代碼,可以去這里看看,也比較簡單。

我們最終需要修改pipe這個方法

namespace LeaguePipeline;class Pipeline implements PipelineInterface{ /** * @var callable[] */ private $stages = []; /** * @var ProcessorInterface */ private $processor; public function __construct(ProcessorInterface $processor = null, callable ...$stages) { $this->processor = $processor ?? new FingersCrossedProcessor; $this->stages = $stages; } public function pipe(callable $stage): PipelineInterface { $pipeline = clone $this; $pipeline->stages[] = $stage; return $pipeline; } public function process($payload) { return $this->processor->process($payload, ...$this->stages); } public function __invoke($payload) { return $this->process($payload); }}

這么多框架里面我這里建議拿Tp6的來做參考,功能還算夠用。

<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2019 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: yunwuxin <448901948@qq.com>// +----------------------------------------------------------------------namespace think;use Closure;use Exception;use Throwable;class Pipeline{ protected $passable; protected $pipes = []; protected $exceptionHandler; /** * 初始數據 * @param $passable * @return $this */ public function send($passable) { $this->passable = $passable; return $this; } /** * 調用棧 * @param $pipes * @return $this */ public function through($pipes) { $this->pipes = is_array($pipes) ? $pipes : func_get_args(); return $this; } /** * 執行 * @param Closure $destination * @return mixed */ public function then(Closure $destination) { $pipeline = array_reduce( array_reverse($this->pipes), $this->carry(), function ($passable) use ($destination) {try { return $destination($passable);} catch (Throwable | Exception $e) { return $this->handleException($passable, $e);} }); return $pipeline($this->passable); } /** * 設置異常處理器 * @param callable $handler * @return $this */ public function whenException($handler) { $this->exceptionHandler = $handler; return $this; } protected function carry() { return function ($stack, $pipe) { return function ($passable) use ($stack, $pipe) {try { return $pipe($passable, $stack);} catch (Throwable | Exception $e) { return $this->handleException($passable, $e);} }; }; } /** * 異常處理 * @param $passable * @param $e * @return mixed */ protected function handleException($passable, Throwable $e) { if ($this->exceptionHandler) { return call_user_func($this->exceptionHandler, $passable, $e); } throw $e; }}

這種寫法有什么好?

其實就好就好在,你在處理一個請求的過程中,分配任務的時候,在處理的過程,每個中間的人,只要做自己處理的請求和結果還有請求即可。讓當數據到達Controller里的時候,顯示業務邏輯的時候更加強大

到此這篇關于PHP Pipeline 實現中間件的示例代碼的文章就介紹到這了,更多相關PHP Pipeline 中間件內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品日韩精品中文字幕| 你懂的亚洲视频| 精品一区二区三区四区五区| 国产日韩欧美| 精品国产a一区二区三区v免费| 国产精品一区二区美女视频免费看 | 精品国产三区在线| 精品国产午夜肉伦伦影院| 国产精品久久久久久久久久白浆 | 亚洲91视频| 激情91久久| 中国女人久久久| 蜜臀av在线播放一区二区三区| 在线一区二区三区视频| 一区二区日韩免费看| 日韩精品免费视频一区二区三区| 国产日韩亚洲| 国产人成精品一区二区三| 日韩国产在线一| 激情综合婷婷| 日韩精品一级二级 | 99国产精品一区二区| 久久99精品久久久久久园产越南| 久久久人人人| 美女少妇全过程你懂的久久| 国产精品资源| 色吊丝一区二区| 亚洲久久视频| 国产精品黑丝在线播放| 蜜桃伊人久久| 激情中国色综合| 99久久亚洲精品| 日本中文字幕一区二区| 高清久久一区| 日韩精品一区二区三区中文在线| 岛国av在线网站| 日韩综合一区二区三区| av资源中文在线| 日本成人精品| 九一国产精品| 国产一区二区三区免费在线| 日av在线不卡| 亚洲成av人片一区二区密柚| 国产欧美88| 亚洲精品看片| 国产视频亚洲| 国产不卡精品在线| 91亚洲无吗| 中文字幕成人| 亚洲精品网址| 免费毛片在线不卡| 色婷婷色综合| 精品一区视频| 麻豆视频一区二区| 国产欧美亚洲一区| 青草国产精品| 国产日韩欧美一区二区三区在线观看| 男女性色大片免费观看一区二区 | 欧美天堂一区| 亚洲另类av| 亚洲毛片在线免费| 中文一区一区三区免费在线观| 欧美精选一区二区三区| 欧美精品一二| 噜噜噜躁狠狠躁狠狠精品视频| 九九久久电影| 首页国产欧美日韩丝袜| 中文在线一区| 综合一区二区三区| 久久国产人妖系列| 国产精品a级| 激情黄产视频在线免费观看| 久久不卡国产精品一区二区| 国产精品三p一区二区| 国产精品大片免费观看| 黄色网一区二区| 天堂日韩电影| 亚洲欧美日韩视频二区| 日本亚洲欧洲无免费码在线| 欧美日本一区| 日韩欧美一区免费| 国产亚洲精品v| 欧美日韩一区二区三区不卡视频 | 国产一区二区三区成人欧美日韩在线观看| 免费在线播放第一区高清av| 中文一区一区三区高中清不卡免费| 久久久久久免费视频| 日韩精品一二三四| 美女视频网站久久| 色婷婷狠狠五月综合天色拍| 亚洲人成网77777色在线播放 | 欧美日韩国产亚洲一区| 日韩精品免费视频一区二区三区| 国产96在线亚洲| 深夜福利亚洲| 日韩精品免费一区二区在线观看 | 欧美一级久久| 亚洲精品电影| 国产成人免费视频网站视频社区| 亚洲中字黄色| 高清一区二区三区| 综合一区二区三区| 久久精品国语| 你懂的网址国产 欧美| 天堂av在线一区| 久久久国产精品一区二区中文| 国产麻豆精品| 日韩在线电影| 日韩一区二区免费看| 黄色在线网站噜噜噜| 国产精品久久久久久久久久久久久久久| 久久精品国产大片免费观看| 欧美国产三级| 日韩高清成人在线| 三级在线观看一区二区| 韩国久久久久久| 精品久久在线| 狂野欧美性猛交xxxx| 91嫩草精品| 日韩欧美2区| 亚洲免费一区二区| 99在线观看免费视频精品观看| jizzjizz中国精品麻豆| 国产日产精品一区二区三区四区的观看方式 | 玖玖玖国产精品| 亚洲在线免费| 中文字幕一区二区三区四区久久| 国产视频一区三区| 99国产精品久久久久久久成人热| 不卡一区综合视频| 欧美亚洲激情| 午夜在线视频观看日韩17c| 亚洲韩日在线| 午夜在线播放视频欧美| 亚洲一区导航| 亚洲bt欧美bt精品777| 亚洲日本免费电影| 国产欧美日韩在线观看视频| 国产精品国码视频| 日韩av免费| 国产一级久久| 91成人精品在线| 久久精品亚洲| 久久久精品五月天| 一区在线观看| 日韩精品午夜视频| 成人在线黄色| 影院欧美亚洲| 亚洲免费专区| 国产经典一区| 日韩av有码| 亚洲激情不卡| 国产精品一线| 亚洲高清激情| 国产三级精品三级在线观看国产| 国产资源在线观看入口av| 欧美日韩国产亚洲一区| 日韩不卡手机在线v区| 久久久久久色 | 亚洲综合专区| 黄色在线网站噜噜噜| 视频一区二区三区在线| 久久久亚洲欧洲日产| 亚洲视频www| 国产在线|日韩| 国产精品综合| 亚洲天堂日韩在线| 日韩深夜视频| 国产日韩中文在线中文字幕| 91精品成人| 高清在线一区| 国产精品视频一区视频二区| 丝袜a∨在线一区二区三区不卡| 精品视频自拍| 综合日韩在线| 午夜一级在线看亚洲| 久久久久久久久丰满| 欧美xxxx中国| 国产精品一区二区精品视频观看| 蜜桃视频在线观看一区二区| 99精品视频在线观看免费播放| 久久99精品久久久久久园产越南| 亚洲天堂免费| 久久成人国产| 亚洲一区国产一区| 欧美特黄视频| 黄色在线一区| 中日韩男男gay无套| 欧美日韩激情在线一区二区三区| 国产aa精品| 亚洲一级少妇| 日韩国产一区二区三区| 给我免费播放日韩视频| 精品在线网站观看| 国产精品不卡| 日韩在线精品| 亚洲激情中文在线| 蘑菇福利视频一区播放| 视频一区欧美精品| 喷白浆一区二区|