成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

深入理解 Laravel 管道

paraller / 2526人閱讀

摘要:將請求傳入到指定的中間件路由。用于處理任務(wù)的方法接收兩個參數(shù),第一個是一個可傳遞的對象,第二個是閉包,在運行最后一個管道后對象將被重定向到這個閉包。我希望這個實例能夠讓你對有更深如的了解,并知道如何使用它們。

這是一篇譯文,原文 Understanding Laravel Pipelines。譯文首發(fā)于 深入理解 Laravel 管道,轉(zhuǎn)載請注明出處。

基本上,你可以使用 laravel 管道(pipelines)基于鏈?zhǔn)讲僮鲗ο髠魅攵鄠€類中執(zhí)行任何類型的任務(wù),并在所有「任務(wù)」執(zhí)行完成后一次性返回最終結(jié)果。

你可以從 Laravel pipelines 獲取更多相關(guān)知識。

有關(guān)管理工作原理的最常見的示例是在框架本身的組件中的使用。我這里說的就是「中間件」。

中間件提供一種方便的機(jī)制來過濾發(fā)送到應(yīng)用中的 HTTP 請求...

下面是一個基本的中間件示例:


這些「中間件」實際上就是管道通過接受傳入的請求,來處理執(zhí)行所需的任務(wù)。在這里你可以來檢測當(dāng)前接受的請求是一個 HTTP 請求、JSON 請求或任何用戶認(rèn)證等工作。

如果你快速瀏覽過 IlluminateFoundationHttpKernel 類,你會看到中間件是如何在 Pipeline 對象中被執(zhí)行的。

/**
  * 將請求傳入到指定的 中間件/路由。

  * @param  IlluminateHttpRequest  $request
  * @return IlluminateHttpResponse
  */
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 實例將請求發(fā)送到一組中間件中,并將其分發(fā)到路由器。

如果這段代碼對你來說有些手足無措的話請不用擔(dān)心。我將以一些實例來闡明它的相關(guān)概念。

在類中運行多個任務(wù)(Working on a class that requires to run multiple tasks)

考慮一下這樣的場景。我們需要創(chuàng)建一個允許用戶創(chuàng)建話題和留言功能的論壇系統(tǒng)。但客戶端在它們創(chuàng)建或編輯時要求你自動刪除標(biāo)簽。

下面是你需要做的事情:

替換文本中的 link 標(biāo)簽。

使用「*」替換掉敏感詞。

移除文本中的 script 標(biāo)簽。

也許最終你會構(gòu)建相關(guān)的類來處理這些「任務(wù)」。

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

我們要做的就是將我們的「內(nèi)容」依次傳入每個任務(wù),然后將上一個任務(wù)處理結(jié)果傳入到下一個任務(wù)。我們可以使用管道來處理這個任務(wù)。

public function create(Request $request)
{
    $pipes = [
        RemoveBadWords::class,
        ReplaceLinkTags::class,
        RemoveScriptTags::class
    ];

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

    // 返回響應(yīng)
}

每個「任務(wù)」類都需要定義一個「handle」方法來處理功能。也許通過實現(xiàn)接口編程是一個不錯的主意:


命名好難啊 ˉ_(ツ)_/ˉ*


用于處理任務(wù)的方法接收兩個參數(shù),第一個是一個可傳遞的對象,第二個是閉包,在運行最后一個管道后對象將被重定向到這個閉包。

你也可以自定義方法名來替代「handle」方法名。然后您需要指定管道要使用的方法名,就像這樣:

app(Pipeline::class)
 ->send($content)
 ->through($pipes)
 ->via("customMethodName") // <---- 就是這個 :)
 ->then(function ($content) {
     return Post::create(["content" => $content]);
 });
最后發(fā)生了什么?(What happens at the end ?)

這里應(yīng)該發(fā)生的是提交的內(nèi)容將會被每個 $pipes 修改,最終的返回的內(nèi)容將被保存。

$post = app(Pipeline::class)
    ->send($request->all())
    ->through($pipes)
    ->then(function ($content) {
        return Post::create(["content" => $content]);
    });
結(jié)束語(Final words)

記住, 有很多方法可以處理這種類型的問題。如何選擇取決于你。但是值得高興的是在你的知識庫中在需要的時候已經(jīng)建立了管道這個新的武器的知識。

我希望這個實例能夠讓你對「Laravel Pipelines」有更深如的了解,并知道如何使用它們。

你也可以去查看 laravel api 文檔,如果你希望了解更多它是如何工作的 https://laravel.com/api/5.4/Illuminate/Pipeline/Pipeline.html。

在哪用?(Where to use it ?)

這需要靠你去發(fā)現(xiàn)... 如果你有任何好的將以請聯(lián)系我。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29100.html

相關(guān)文章

  • Laravel 深入核心系列教程

    摘要:前言年底了不太忙,最近一段時間也一直在研究,就想寫篇關(guān)于比較深一點的教程系列啥的,于是就找到站長給開了寫教程的渠道。優(yōu)點的就是為藝術(shù)家創(chuàng)造的框架,它也是工程化的趨勢。項目維護(hù)方便也是事實。如果有遇到問題可以直接在教程下面留言。 前言 年底了不太忙,最近一段時間也一直在研究laravel,就想寫篇關(guān)于laravel比較深一點的教程系列啥的,于是就找到站長給開了寫教程的渠道。由于第一次寫,...

    wemall 評論0 收藏0
  • laravel框架應(yīng)用和composer擴(kuò)展包開發(fā)

    摘要:官方地址是目前最流行的框架,發(fā)展勢頭迅猛,應(yīng)用非常廣泛,有豐富的擴(kuò)展包可以應(yīng)付你能想到的各種應(yīng)用場景,框架思想前衛(wèi),跟隨時代潮流,提倡優(yōu)雅代碼,自稱為工匠,其中的模板引擎容器以及擴(kuò)展包為業(yè)務(wù)的開發(fā)提供了極大的便利。 laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,發(fā)展勢頭迅猛,應(yīng)用非常廣泛,有豐富的擴(kuò)展包可以應(yīng)付你能想到的各種應(yīng)用場景,lara...

    shevy 評論0 收藏0
  • php管道模式手測

    摘要:所以管道模式大致需要三個角色管道,閥門和載荷流水。模仿返回處理后的結(jié)果輸出結(jié)語上面的代碼并沒有達(dá)到中間件的真正執(zhí)行部分,例子中只是用到了管道模式的一部分。 一直在用Laravel框架,很喜歡laravel框架的中間件。在請求到結(jié)果之前,如果我們想要對路由或請求進(jìn)行額外的處理,簡單的加個Midleware中間件就行了,很簡單,很方便是不是。最近幾天看了下它的中間件的實現(xiàn)方式,把自己的心得...

    zzir 評論0 收藏0
  • Laravel中間件原理

    摘要:直到所有中間件都執(zhí)行完畢,最后在執(zhí)行最后的即上述的方法如果上述有地方難懂的,可以參考這邊文章內(nèi)置函數(shù)在中的使用以上是在通過全局中間件時的大致流程,通過中間件和路由中間件也是一樣的,都是采用管道流操作,詳情可翻閱源碼 簡介 Laravel 中間件提供了一種方便的機(jī)制來過濾進(jìn)入應(yīng)用的 HTTP 請求, 如ValidatePostSize用來驗證POST請求體大小、ThrottleReque...

    張憲坤 評論0 收藏0
  • Laravel 管道流原理

    摘要:管道流原理強(qiáng)烈依賴函數(shù),我們先來了解下函數(shù)的使用。第二次迭代時,的值為上述返回的閉包偽代碼,的值為,返回一個閉包,當(dāng)我們執(zhí)行這個閉包時,滿足,得到結(jié)果。自定義中間件為的管道流核心類在的方法中,為上述的閉包,為要通過的中間件數(shù)組,為對象。 Laravel管道流原理強(qiáng)烈依賴array_reduce函數(shù),我們先來了解下array_reduce函數(shù)的使用。 原標(biāo)題PHP 內(nèi)置函數(shù) array_...

    Mr_zhang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<