Laravelパイプライン(コード)の詳細な分析
この記事で共有する内容は、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()); }
このコードからわかるように、パイプライン インスタンスはリクエストを一連のミドルウェアに送信し、それをルーターに配布します。
このコードが少しわかりにくいかもしれませんが、心配しないでください。関連する概念をいくつかの例で説明します。
クラス内で複数のタスクを実行する (複数のタスクを実行する必要があるクラスで作業する)
次のシナリオを考えてみましょう。ユーザーがトピックを作成してメッセージを残せるフォーラム システムを作成する必要があります。ただし、クライアントは、タグが作成または編集されたときにタグを自動的に削除することを要求します。
ここで行う必要があるのは次のとおりです:
テキスト内のリンク タグを置き換えます。
機密性の高い単語を置き換えるには「*」を使用します。
テキストからスクリプト タグを削除します。
最終的には、これらの「タスク」を処理する関連クラスを構築することになるでしょう。
$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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用して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で後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

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

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