0

0

一文了解Laravel中的Pipeline(管道)

青灯夜游

青灯夜游

发布时间:2022-11-16 20:49:57

|

2125人浏览过

|

来源于learnku

转载

本篇文章带大家了解一下laravel中的pipeline(管道),聊聊管道设计范式,希望对大家有所帮助!

一文了解Laravel中的Pipeline(管道)

总的来说,通过使用 Laravel 中的管道,你能够流畅地在若干个类之间传递一个对象,从而执行一个任意类型的任务,一旦所有的任务都被执行完,就会将结果值返回。

接下来,你能了解到更多关于 Laravel pipelines 的知识。

关于管道是运行的方式,最明显的范例其实就在框架本身最常用的一个组件当中,没错,我说的就是中间件。

中间件为过滤进入应用的 HTTP 请求提供了一个便利的机制。

一个基本的中间件应该是这个样子的:

这些「中间件」实际上就是管道,请求经由这里发送,从而执行任何需要的任务。在这里,你可以检查请求是否是一个 HTTP 请求,是否是一个 JSON 请求,是否存在已认证的用户信息等等。

如果你想快速的查看Illuminate\Foundation\Http\Kernel 类, 你将看到如何使用 Pipeline 类的新实例来执行中间件。

/**
  * Send the given request through the middleware / router.
  *
  * @param  \Illuminate\Http\Request  $request
  * @return \Illuminate\Http\Response
  */
protected function sendRequestThroughRouter($request)
{
    $this->app->instance('request', $request);
    Facade::clearResolvedInstance('request');
    $this->bootstrap();
    return (new Pipeline($this->app))
                    ->send($request)
                    ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
    ->then($this->dispatchToRouter());
}

你可以在代码中看到类似的内容:通过中间件列表发送请求的新管道,然后发送路由。

如果这让你看起来有点不知所措也不用担心。让我们试着用以下这个例子来阐明这个概念。

处理多任务运行类

让我们来看一种场景。 比方说,你建立了一个人们可以发帖并发表评论的论坛。但是,您的用户请求您自动删除标签或在创建时在每一个内容上编辑标签。

此时你被要求做的事情如下:

  • 用纯文本替换链接标记;

  • 用“*”替换敏感词;

    DM6在线读报系统
    DM6在线读报系统

    DM6在线读报系统ASPX 免费版2.0。如果您是一个DM广告公司的网站管理员,正在寻求一套程序或源码可以让公司网站具有一套配合网站整体架构的电子杂志频道,那您现在可找对了。请仔细阅读以下关于DM6在线读报系统的说明。 这是一个网站用户可以直接在线阅读报纸且无需插件(连Flash都不用)、无需下载、无需安装的在线读报系统(服务器端模块),通过将此系统放到网站文件目录中即可轻松生成网站的在线读报频道

    下载
  • 从内容中完全删除脚本标记。

可能你最终会创建类来处理这些 “tasks”。

$pipes = [
    RemoveBadWords::class
    ReplaceLinkTags::class
    RemoveScriptTags::class
];

我们要做的是将给定的“内容”传递给每个任务,然后将结果返回给下一个任务。我们可以使用pipeline来做到这一点。

send($request->content)
        ->through($pipes)
        ->then(function ($content) {
            return Post::create(['content' => 'content']);
        });
    // return any type of response
}

每个“task”类应该有一个“handle”方法来执行操作。也许每个类都有统一的约束是一个不错的选择:

命名是个困难的事情 ¯_(ツ)_/¯

用于执行任务的方法应该接收两个参数,第一个参数是合格的对象,第二个参数是当前操作处理完后会接管的下一个闭包(匿名函数)。

您可以使用自定义方法名称而不是“handle”。然后你需要指定pipeline要使用的方法名称,比如:

app(Pipeline::class)
 ->send($content)
 ->through($pipes)
 ->via('customMethodName') // <---- This one :)
 ->then(function ($content) {
     return Post::create(['content' => $content]);
 });

最后产生的效果是什么 ?

提交的内容将会被各个$pipes 所处理, 被处理的结果将会存储下来。

$post = app(Pipeline::class)
    ->send($request->all())
    ->through($pipes)
    ->then(function ($content) {
        return Post::create(['content' => $content]);
    });

结语

记住,有很多方法可以解决这类问题。至于如何选择,就看你自己的选择了。只要知道一点,需要的时候你可以使用这个工具就可以了。我希望这个例子让你更好的了解”Laravel pipelines”,以及如何使用它们。如果你想了解或者学习更多,你可以查看Laravel的API文档laravel.com/api/5.4/Illuminate/Pip...

原文地址:https://medium.com/@jeffochoa/understanding-laravel-pipelines-a7191f75c351

译文地址:https://learnku.com/laravel/t/7543/pipeline-pipeline-design-paradigm-in-laravel

【相关推荐:laravel视频教程

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

4

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

3

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

10

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

15

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

42

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

6

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号