ホームページ > 記事 > PHPフレームワーク > Laravel のパイプラインについて 1 つの記事で学ぶ
この記事では、Laravel のパイプラインを理解し、パイプライン設計パラダイムについて説明します。お役に立てば幸いです。
一般に、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('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::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(['content' => 'content']); }); // 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('customMethodName') // <---- This one :)
->then(function ($content) {
return Post::create(['content' => $content]);
});
によって処理され、処理結果が保存されます。 <pre class="brush:php;toolbar:false;">$post = app(Pipeline::class)
->send($request->all())
->through($pipes)
->then(function ($content) {
return Post::create([&#39;content&#39; => $content]);
});</pre>
laravel ビデオチュートリアル翻訳アドレス: https://learnku.com/laravel/t/7543/pipeline-pipeline-design-paradigm-in-laravel
[関連する推奨事項:
以上がLaravel のパイプラインについて 1 つの記事で学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。