目次
クラス内で複数のタスクを実行する (複数のタスクを実行する必要があるクラスで作業する)
最後に何が起こりますか? ここで何が起こるかというと、送信されたコンテンツは
この種の問題に対処する方法はたくさんあることを覚えておいてください。どのように選択するかはあなた次第です。ただし、必要なときにすでに組み込まれている知識ベースにこの新しい武器に関する知識があることをうれしく思います。
ホームページ バックエンド開発 PHPチュートリアル Laravelパイプライン(コード)の詳細な分析

Laravelパイプライン(コード)の詳細な分析

Jul 23, 2018 am 11:55 AM
laravel php pipe tutorial

この記事で共有する内容は、Laravel パイプラインの詳細な分析 (コード) であり、一定の参考価値があります。必要な友人はそれを参照できます。

基本的に、laravel パイプラインを使用してオブジェクトを複数のクラスに渡し、チェーン操作に基づいてあらゆるタイプのタスクを実行し、すべての「タスク」が完了した後に最終結果を一度に返すことができます。

管理がどのように機能するかを示す最も一般的な例は、フレームワーク自体のコンポーネント内での管理の使用です。ここで私が話しているのは「ミドルウェア」です。

ミドルウェアは、アプリケーションに送信される 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());
}
ログイン後にコピー

このコードからわかるように、パイプライン インスタンスはリクエストを一連のミドルウェアに送信し、それをルーターに配布します。

このコードが少しわかりにくいかもしれませんが、心配しないでください。関連する概念をいくつかの例で説明します。

クラス内で複数のタスクを実行する (複数のタスクを実行する必要があるクラスで作業する)

次のシナリオを考えてみましょう。ユーザーがトピックを作成してメッセージを残せるフォーラム システムを作成する必要があります。ただし、クライアントは、タグが作成または編集されたときにタグを自動的に削除することを要求します。

ここで行う必要があるのは次のとおりです:

  1. テキスト内のリンク タグを置き換えます。

  2. 機密性の高い単語を置き換えるには「*」を使用します。

  3. テキストからスクリプト タグを削除します。

最終的には、これらの「タスク」を処理する関連クラスを構築することになるでしょう。

$pipes = [
    RemoveBadWords::class
    ReplaceLinkTags::clas
    RemoveScriptTags::class
];
ログイン後にコピー

私たちがしなければならないことは、「コンテンツ」を各タスクに順番に渡し、前のタスクの処理結果を次のタスクに渡すことです。パイプを使用してこのタスクを処理できます。

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]);
    });

    // 返回响应
}
ログイン後にコピー

各「タスク」クラスは、関数を処理するための「ハンドル」メソッドを定義する必要があります。おそらくインターフェイスを実装してプログラミングするのが良い考えでしょう:

<?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)
    {
        // 在这里处理任务,返回待更新的 **$content** 给到下一个管道任务。
        return  $next($content);
    }
}
ログイン後にコピー

タスクの処理に使用されるメソッドは 2 つのパラメータを受け取ります。1 つ目は通過可能なオブジェクトで、2 つ目は最後のパイプラインの実行後にオブジェクトがリダイレクトされるクロージャです。

メソッド名をカスタマイズして、「ハンドル」メソッド名を置き換えることもできます。次に、パイプラインで使用するメソッド名を次のように指定する必要があります:

app(Pipeline::class)
 ->send($content)
 ->through($pipes)
 ->via('customMethodName') // <---- 就是这个 :)
 ->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 パイプライン」をより深く理解し、その使用方法を知ることができれば幸いです。

仕組みについて詳しく知りたい場合は、laravel API ドキュメントをチェックすることもできます。

関連する推奨事項:

Laravel Docker を自分で構築する 開発環境メソッド

以上がLaravelパイプライン(コード)の詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

Laravelで電子メールの送信が失敗したときに返品コードを取得する方法は? Laravelで電子メールの送信が失敗したときに返品コードを取得する方法は? Apr 01, 2025 pm 02:45 PM

Laravelの電子メールの送信が失敗したときに戻りコードを取得する方法。 Laravelを使用してアプリケーションを開発する場合、検証コードを送信する必要がある状況に遭遇することがよくあります。そして実際には...

See all articles