基本の部分(Laravel)

【Laravel初心者向け】サービスコンテナと結合(バインド)について徹底解説

サービスコンテナへの結合

サービスコンテナは、必要なサービス類を全て自動的に組み込みます。ただ、クラス内で「ここでインスタンスを組み込みます」といった明示的な処理はありません。サービスコンテナが自動的にインスタンスを作成し、組み込んでいます。こうしたインスタンスの組み込み処理を「結合」と呼びます。

Laravel公式 サービスコンテナ

この結合は勝手にやってくれる際は便利なのですが、時としてインスタンス作成を明示的に行いたい場合もあります。このような場合に、「どのようにインスタンスがサービスコンテナに結合されるか」を理解しておく必要があります。

インスタンスのサービスコンテナへの結合はサービスコンテナに用意されるbindメソッドを使用して行われます。

bindメソッドは結合するクラス名と、実際に結合に使うインスタンを返すクロージャ(関数)を引数に指定します。クロージャ内でインスタンスを作成し、returnすれば、そのインスタンスがサービスコンテナに結合されます。

サービスコンテナについて詳しく知りたい方はここを押してください。

 bindの基本的な使い方

では実際にbindを使用してみましょう。

クラス構成について詳しく知りたい方はこちらの記事を参照ください

testServiceクラスを修正し、引数なしでインスタンスを作成し、後からIDを設定できるように修正しましょう。

プロバイダでMyServiceを結合

上記で修正したtestserviceクラスを結合しましょう。システム全体で結合が反映されることを考えて、プロバイダを利用することをおすすめします。

app/Providers/AppServiceProvider.php を開きbootメソッドを下記の様に修正しましょう。

上記でbindを使用してtestServiceの結合を行っております。クロージャでは、まずnew testServiceでインスタンスを作成し、setid(0)を0に設定しておきましょう。

testServiceを利用

では、testService利用してみましょう。

app/Http/Controllers/HelloController.php@indexを下記の様に修正してください。

修正が完了したら、/helloにアクセスしてみてください。

下記の様に表示ができていれば成功です。

idが-1ではなく、0に設定されているということはサービスコンテナが自動的に結合したインスタンスではなく、明示的に結合されたインスタンスが使用されていることが確認できます。

これからLaravelを始めるならこれが最適!!


今までLaravelに関しての良書はほとんどなく、あっても内容が古かったり分かりにくいのばかりで、先駆者達は苦労したのではないでしょうか?

そんな中で発売されたこの本は、現在の日本国内にて唯一のLaravelの良書と言い切っても良いかと思います。PHP中級者以上なら苦労することなく読めるでしょう。Laravelは高機能ゆえ、全機能を説明してはいませんが、この本をとっかかりにすれば自ずとLaravelをマスターすることができると思います。