成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

深入理解 Laravel 管道

paraller / 2572人閱讀

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

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

基本上,你可以使用 laravel 管道(pipelines)基于鏈?zhǔn)讲僮鲗?duì)象傳入多個(gè)類中執(zhí)行任何類型的任務(wù),并在所有「任務(wù)」執(zhí)行完成后一次性返回最終結(jié)果。

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

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

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

下面是一個(gè)基本的中間件示例:


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

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

/**
  * 將請(qǐng)求傳入到指定的 中間件/路由。

  * @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 實(shí)例將請(qǐng)求發(fā)送到一組中間件中,并將其分發(fā)到路由器。

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

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

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

下面是你需要做的事情:

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

在哪用?(Where to use it ?)

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/29100.html

相關(guān)文章

  • Laravel 深入核心系列教程

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

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

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

    shevy 評(píng)論0 收藏0
  • php管道模式手測(cè)

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

    zzir 評(píng)論0 收藏0
  • Laravel中間件原理

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

    張憲坤 評(píng)論0 收藏0
  • Laravel 管道流原理

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

    Mr_zhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<