正文
这是一篇译文,原文
Understanding Laravel Pipelines
。译文首发于
深入理解 Laravel 管道
,转载请注明出处。
基本上,你可以使用 laravel 管道(pipelines)基于链式操作将对象传入多个类中执行任何类型的任务,并在所有「任务」执行完成后一次性返回最终结果。
你可以从
Laravel pipelines
获取更多相关知识。
有关管理工作原理的最常见的示例是在框架本身的组件中的使用。我这里说的就是「中间件」。
中间件提供一种方便的机制来过滤发送到应用中的 HTTP 请求...
下面是一个基本的中间件示例:
<?php
namespace App\Http\Middleware;
use Closure;
class TestMiddleware
{
/**
* 处理请求
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// 在这里加入你的代码
return $next($request);
}
}
这些「中间件」实际上就是管道通过接受传入的请求,来处理执行所需的任务。在这里你可以来检测当前接受的请求是一个 HTTP 请求、JSON 请求或任何用户认证等工作。
如果你快速浏览过
Illuminate\Foundation\Http\Kernel
类,你会看到中间件是如何在
Pipeline
对象中被执行的。
/**
* 将请求传入到指定的 中间件/路由。
* @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());
}
你可以从这段代码中看到:pipeline 实例将请求发送到一组中间件中,并将其分发到路由器。
如果这段代码对你来说有些手足无措的话请不用担心。我将以一些实例来阐明它的相关概念。
在类中运行多个任务(Working on a class that requires to run multiple tasks)
考虑一下这样的场景。我们需要创建一个允许用户创建话题和留言功能的论坛系统。但客户端在它们创建或编辑时要求你自动删除标签。
下面是你需要做的事情:
-
替换文本中的 link 标签。
-
使用「*」替换掉敏感词。
-
移除文本中的 script 标签。
也许最终你会构建相关的类来处理这些「任务」。