【Laravel】DI・サービスコンテナとは?

Laravel

DIとは

Dependency Injectionの略称。日本語だと依存性注入といいます。

「外部にあるオブジェクトを、依存関係である別のクラスに渡すこと」ができます。

依存関係とは?

例えば、「A関数を動かすためにはBクラスが必要になっている」
関係のことだと認識しています
※A関数のなかでBクラスの挙動ができるロジックを記載する、ということは考えない前提

そうすることで、クラスの中をすっきりすることができます。

LaravelではDI機能を実装できる、「サービスコンテナ」というクラスを作る機能が用意されており、DIが簡単にできるようになっています。

サービスコンテナとは

クラスの中にある関数の引数に、予め登録された利用したい機能クラス名を変数を記述するだけで、インスタンスを立てることができます。

実際にコードを見てみましょう。

public function store(Request $request) {
    // 省略
}

Laravelを少し経験したことがある方は、このような記述をみたことがある方が多いのではないでしょうか?

実は、

Request $request

が、サービスコンテナの機能を使っていることになっています。

引数にクラス名とその変数名を記述するだけで、Requestのインスタンスが立ち上がりRequestクラスの機能が使えるようになっています。

ポイント

この機能のことを「メソッドインジェクション」といいます


コントローラーにインスタンスを立てなくてもクラスを使うことができるので、記述をスッキリすることになっています。

RequestはVenderの中にあり

/vendor/laravel/framework/src/Illuminate/Http/Request.php にありますが、

この処理部分をまとめてサービスコンテナの中に作れれば、
コントローラーの中をすっきりすることができ、同じ処理を使い回しすることができます。

次回、実際にサービスクラスの自分での作り方を取りまとめたいと思います。

コメント

タイトルとURLをコピーしました