はじめに
ちょっとどころかかなり前に執筆しておいて放置していた記事をせっかくなので公開します。
ドキュメント
Laravel10のドキュメントにはこう書かれてます
LaravelのPipelineファサードは、指定する入力を一連の呼び出し可能なクラス、クロージャ、Callableを通して、「パイプ」接続する便利な方法を提供し、各クラスに入力を検査または修正する機会を与え、パイプラインの次のCallableを呼び出します。
え?専門用語多すぎて意味分からん
クロージャ?Callable?パイプ?何それ美味しいの?
Callable
「呼び出すことが出来るもの」という意味。
Laravelに限らず、プログラミング全般で用いられる用語
Laravelにおいて、Callableは「関数」「クロージャ」「オブジェクトのメソッド」などを指します。
確かに上3つは全部「呼び出すことができる物」にあたっている。
Pipeline
一連の処理をパイプラインのように順々に実行するための仕組み。
Laravelでは「リクエスト処理」や「データ処理」など様々な場面でPipelineで利用されている。
Pipelineの仕組み
データ --> 処理1 --> 処理2 --> 処理3 --> 結果
具体的な仕組み
- 初期化:Pipelineが作成されると、処理の順番が設定されます。
- データの投入:最初の処理にデータが渡されます。
- 処理の実行:各処理は、受け取ったデータを加工し、次の処理に渡します。
- 最終処理:最後の処理が実行され、最終的な結果が得られます。
下記が基本の形です。
Pipeline::send(/*.パイプを通過させたいオブジェクト */)
->through(/* 処理させたいメソッドの配列 */)
->then(/* 最終処理 */);
パイプを通過させたいオブジェクト
処理させたい対象のオブジェクト。
文字列とか、QueryBuilderとかrequestオブジェクトとか。
なんでもいい。
Pipeline::send($request)
とか
$builder = User::query();
$builder = Pipeline::send($builder)
->through([
ConditionGender::class,
])->thenReturn();
return $builder->get(); // queryのget()を実行してる
処理させたいメソッドの配列
通過させたいオブジェクトに対して処理を行う内容のメソッドです。
最終処理
単純に言えばfinallyと同じ。returnで値を返せばそれが返ります。
特に処理を行わない場合は、then()
の代わりにthenReturn()
というメソッドを使う。
と言う感じになってます。
少しでも参考になれば嬉しいですっ