Laravel のパイプラインについて 1 つの記事で学ぶ

青灯夜游
リリース: 2022-11-16 20:49:57
転載
1764 人が閲覧しました

この記事では、Laravel のパイプラインを理解し、パイプライン設計パラダイムについて説明します。お役に立てば幸いです。

Laravel のパイプラインについて 1 つの記事で学ぶ

一般に、Laravel でパイプを使用すると、複数のクラス間でオブジェクトをスムーズに渡して、あらゆる種類のタスクを実行できます。すべてのタスクが実行された後、結果の値は次のようになります。返される。

次に、Laravel パイプライン について詳しく学習します。

パイプラインの実行方法に関して、最もわかりやすい例は、フレームワーク自体で最も一般的に使用されるコンポーネントの 1 つです。はい、ミドルウェアについて話しています。

ミドルウェアは、アプリケーションに入る 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(&#39;request&#39;, $request);
    Facade::clearResolvedInstance(&#39;request&#39;);
    $this->bootstrap();
    return (new Pipeline($this->app))
                    ->send($request)
                    ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
    ->then($this->dispatchToRouter());
}
ログイン後にコピー

コード内にも同様のものが見られます。ミドルウェア リストを通じてリクエストを送信し、ルートを送信する新しいパイプです。

これが少し圧倒されるかもしれませんが、心配しないでください。次の例を使用して、この概念を明確にしてみましょう。

#マルチタスク実行クラスの処理

シナリオを見てみましょう。人々が投稿したりコメントしたりできるフォーラムを設定したとします。ただし、ユーザーは、作成時にすべてのコンテンツのタグを自動的に削除するか、タグを編集することを要求します。

この時点で行うように求められることは次のとおりです:

  • リンク タグをプレーン テキストに置き換えます;

  • #リンク タグを「*」に置き換えます。デリケートな単語を置き換えます。
  • #スクリプト タグをコンテンツから完全に削除します。
  • おそらく、最終的にはこれらの「タスク」を処理するクラスを作成することになるでしょう。
$pipes = [
    RemoveBadWords::class
    ReplaceLinkTags::class
    RemoveScriptTags::class
];
ログイン後にコピー

私たちがやりたいのは、与えられた「コンテンツ」を各タスクに渡し、その結果を次のタスクに返すことです。これを行うにはパイプラインを使用できます。

<?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([&#39;content&#39; => &#39;content&#39;]);
        });
    // return any type of response
}
ログイン後にコピー

各「タスク」クラスには、操作を実行するための「ハンドル」メソッドが必要です。おそらく、各クラスの制約を統一するのが良い選択でしょう:

<?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);
    }
}
ログイン後にコピー

タスクの実行に使用されるメソッドは 2 つのパラメータを受け取る必要があります。最初のパラメータは修飾されたオブジェクトで、2 番目のパラメータは現在の操作の処理後に引き継がれる次のクロージャ (匿名関数) です。

「ハンドル」の代わりにカスタム メソッド名を使用できます。次に、パイプラインで使用するメソッド名を次のように指定する必要があります:

app(Pipeline::class)
 ->send($content)
 ->through($pipes)
 ->via(&#39;customMethodName&#39;) // <---- This one :)
 ->then(function ($content) {
     return Post::create([&#39;content&#39; => $content]);
 });
ログイン後にコピー

最終的な効果は何ですか? submit コンテンツは各

$pipes

によって処理され、処理結果が保存されます。

$post = app(Pipeline::class)
    ->send($request->all())
    ->through($pipes)
    ->then(function ($content) {
        return Post::create([&#39;content&#39; => $content]);
    });
ログイン後にコピー

結論この種の問題を解決するには、さまざまな方法があることを覚えておいてください。選び方に関しては、ご自身の選択次第です。必要なときにこのツールを使用できることを知っておいてください。この例で「Laravel パイプライン」とその使用方法についてよりよく理解していただければ幸いです。さらに詳しく知りたい場合は、Laravel の API ドキュメントをチェックしてください。

laravel.com/api/5.4/Illuminate/Pip...

元のアドレス: https: //medium.com/@jeffochoa/ Understanding-laravel-pipelines-a7191f75c351

翻訳アドレス: https://learnku.com/laravel/t/7543/pipeline-pipeline-design-paradigm-in-laravel

[関連する推奨事項:
laravel ビデオチュートリアル

]

以上がLaravel のパイプラインについて 1 つの記事で学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート