DIとは
Dependency Injectionの略称。日本語だと依存性注入といいます。
「外部にあるオブジェクトを、依存関係である別のクラスに渡すこと」ができます。
そうすることで、クラスの中をすっきりすることができます。
LaravelではDI機能を実装できる、「サービスコンテナ」というクラスを作る機能が用意されており、DIが簡単にできるようになっています。
サービスコンテナとは
クラスの中にある関数の引数に、予め登録された利用したい機能クラス名を変数を記述するだけで、インスタンスを立てることができます。
実際にコードを見てみましょう。
public function store(Request $request) {
// 省略
}
Laravelを少し経験したことがある方は、このような記述をみたことがある方が多いのではないでしょうか?
実は、
Request $request
が、サービスコンテナの機能を使っていることになっています。
引数にクラス名とその変数名を記述するだけで、Requestのインスタンスが立ち上がりRequestクラスの機能が使えるようになっています。
コントローラーにインスタンスを立てなくてもクラスを使うことができるので、記述をスッキリすることになっています。
RequestはVenderの中にあり
/vendor/laravel/framework/src/Illuminate/Http/Request.php にありますが、
この処理部分をまとめてサービスコンテナの中に作れれば、
コントローラーの中をすっきりすることができ、同じ処理を使い回しすることができます。
次回、実際にサービスクラスの自分での作り方を取りまとめたいと思います。
コメント