您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Laravel中的Pipeline怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Laravel中的Pipeline怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
關于管道是運行的方式,最明顯的范例其實就在框架本身最常用的一個組件當中,沒錯,我說的就是中間件。
中間件為過濾進入應用的 HTTP 請求提供了一個便利的機制。
一個基本的中間件應該是這個樣子的:
<?php
namespace App\Http\Middleware;
use Closure;
class TestMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Here you can add your code
return $next($request);
}
}
這些「中間件」實際上就是管道,請求經由這里發送,從而執行任何需要的任務。在這里,你可以檢查請求是否是一個 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());
}
你可以在代碼中看到類似的內容:通過中間件列表發送請求的新管道,然后發送路由。
如果這讓你看起來有點不知所措也不用擔心。讓我們試著用以下這個例子來闡明這個概念。
讓我們來看一種場景。 比方說,你建立了一個人們可以發帖并發表評論的論壇。但是,您的用戶請求您自動刪除標簽或在創建時在每一個內容上編輯標簽。
此時你被要求做的事情如下:
用純文本替換鏈接標記;
用“*”替換敏感詞;
從內容中完全刪除腳本標記。
可能你最終會創建類來處理這些 “tasks”。
$pipes = [
RemoveBadWords::class
ReplaceLinkTags::class
RemoveScriptTags::class
];
我們要做的是將給定的“內容”傳遞給每個任務,然后將結果返回給下一個任務。我們可以使用pipeline來做到這一點。
<?php
public function create(Request $request)
{
$pipes = [
RemoveBadWords::class,
ReplaceLinkTags::class,
RemoveScriptTags::class
];
$post = app(Pipeline::class)
->send($request->content)
->through($pipes)
->then(function ($content) {
return Post::create(['content' => 'content']);
});
// return any type of response
}
每個“task”類應該有一個“handle”方法來執行操作。也許每個類都有統一的約束是一個不錯的選擇:
<?php
namespace App;
use Closure;
interface Pipe
{
public function handle($content, Closure $next);
}
命名是個困難的事情 ˉ_(ツ)_/ˉ
<?php
namespace App;
use Closure;
class RemoveBadWords implements Pipe
{
public function handle($content, Closure $next)
{
// Here you perform the task and return the updated $content
// to the next pipe
return $next($content);
}
}
用于執行任務的方法應該接收兩個參數,第一個參數是合格的對象,第二個參數是當前操作處理完后會接管的下一個閉包(匿名函數)。
您可以使用自定義方法名稱而不是“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中的Pipeline怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。