0

0

Laravel框架中管道设计模式之中间件的基本工作原理

不言

不言

发布时间:2018-07-31 10:07:59

|

3714人浏览过

|

来源于php中文网

原创

laravel框架中的管道设计模式就是数据传到管道中被处理,然后再传递到下一步,接下来我们就来看看laravel框架中管道设计模式中间件的基本工作原理。

所谓管道(Pipeline)设计模式就是将会数据传递到一个任务序列中,管道扮演者流水线的角色,数据在这里被处理然后传递到下一个步骤。

使用管道使用很多好处的,尤其是在单个任务中编写复杂处理代码时管道为我们提供了极大的便利,而且可以在管道中轻松添加、移除或者替换阶段任务。

Laravel在框架中的很多地方用到了 Pipeline 设计模式,这意味着所有我们需要实现管道设计模式的地方已然是应用底层的一部分了。

我们可以使用 Laravel的内部组件在框架顶层构建自己的功能。今天的教程我们将讨论管道设计模式以及如何使用 Laravel 的内部管道。

什么是管道设计模式?

管道模式用于将复杂的进程分解成多个独立的子任务。每个独立的任务都是可复用的,因此这些任务可以被组合成复杂的进程。

这种模式允许你讲庞大的进程分解成更小的子任务,这些子任务将数据进行处理并将处理后的结果传递给下一个子任务。就像流水线一样,有条不紊,从原料加工到成品,实现一道完整的工序。

管道中的每一个任务都会接受并返回同一类型的数据,这样子任务可以在管道中被添加、移除或者替换,而不影响其它子任务。

如果你熟悉 Unix 系统的话,你可能对管道并不陌生,因为在 shell 命令中我们经常会使用管道命令,例如:

cat helloworld.txt | grep "hello world" | rev | > output.txt

在这个例子中,我们读取文件内容,并在其中查询字符串“hello world”,反转字符串,并最终将其添加到 output.txt 文件中。

Laravel中如何使用管道模式?

Laravel 在框架中的很多地方使用了管道设计模式,最常见的就是中间件的实现。

当请求最终到达控制器动作被处理前,会先经过一系列的中间件。每个中间价都有一个独立的职责,例如,设置 Cookie、判断是否登录以及阻止 CSRF 攻击等等。

每个阶段都会对请求进行处理,如果请求通过就会被传递给下一个处理,不通过就会返回相应的 HTTP 响应。

这种机制使得我们很容易在请求最终到达应用代码前添加处理操作,当然如果不需要这个处理操作你也可以随时移除而不影响请求的生命周期。

管道模式的优点

管道模式有很多优点:

首先,将复杂的处理流程分解成独立的子任务,从而方便测试每个子任务;

其次,被分解的子任务可以被不同的处理进程复用,避免代码冗余。

最后,在复杂进程中添加、移除和替换子任务非常轻松,对已存在的进程没有任何影响。

Vuex参考手册 中文CHM版
Vuex参考手册 中文CHM版

Vuex是一个专门为Vue.js应用设计的状态管理模型 + 库。它为应用内的所有组件提供集中式存储服务,其中的规则确保状态只能按预期方式变更。它可以与 Vue 官方开发工具扩展(devtools extension) 集成,提供高级特征,比如 零配置时空旅行般(基于时间轴)调试,以及状态快照 导出/导入。本文给大家带来Vuex参考手册,需要的朋友们可以过来看看!

下载

管道模式的缺点

当然,管道模式也有缺点:

虽然每个子任务变得简单了,但是当你再度尝试将这些子任务组合成完整进程时有一定复杂性;

此外你还需要保证独立子任务测试通过后整体的流程能正常工作,这有一定的不确定性。

最后,当你看到的都是一个个子任务时,对理解整体流程带来困难(盲人摸象的故事想必大家很熟悉,正是此理)。

如何使用Laravel的管道

使用 Laravel 提供的管道很简单,首先需要创建一个新的 Illuminate\Pipeline\Pipeline 对象,并将其注入到某个 Illuminate\Contracts\Container\Container 的实例:

$pipeline = app('Illuminate\Pipeline\Pipeline');

接下来将你想要传递的对象发送这个管道:

$pipeline->send($request);

然后将其传递到接受并处理请求的任务数组:

$pipeline->through($middleware);

最后运行管道任务并编写回调处理:

$pipeline->then(function ($request) {
    // Do something
});

这就是中间件的基本工作原理:接收 HTTP 请求,让请求经过定义好的路由中间件,最后到达目的地进行处理。

结论

管道设计模式很有用,中间件只是一个特别的例子,Laravel 在框架底层中充分利用了该设计模式,当然你也可以在自己的项目中使用 Laravel 提供的管道。

以上就是本篇文章的全部内容了,更多请关注laravel教程!

相关文章推荐:

laravel环境搭建:laravel如何部署到阿里云或者腾讯云步骤

相关课程推荐:

2017年最新的五个Laravel视频教程推荐

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

313

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

270

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

362

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

362

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

80

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

62

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

62

2025.08.05

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

175

2024.05.11

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

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

精品课程

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

共28课时 | 2.4万人学习

React 教程
React 教程

共58课时 | 2.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.5万人学习

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

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