Laravel のコンストラクタインジェクション

最近(というか今日)引き継いだプログラムを読んでいて発見したのですが、Laravel はコンストラクタにもデータインジェクションが効くようです。例えば Model というモデルがあったとして、

namespace app\Libs;

class Mylib {
  private $model;
  public function __construct() {
    $model = new App\Models\Model;
  }
}
use app\Libs\Mylib;

class MyController extends Controller {
  private $lib;
  public function __construct(Mylib $lib) {
    $this->lib = $lib;
  }
}

としておくと、Laravel が MyController インスタンスを作成すると同時に Mylib インスタンスも作成し、引数に渡してくれます。

この例ではクラス関数を使っても同じことができますが、せっかくクラスにまとめたのにクラス関数にしてしまうのも何だろうなあと思っていたので、結構目からうろこでした。

追記: 参考記事を見ると、データインジェクションの方法(毎回インスタンス化するか、シングルトンにするかなど)も変更できるようです。

投稿者について
みのしす

小さいときは科学者になろうとしたのに、その時にたまたま身に着けたプログラミングで未だに飯を食っているしがないおじさんです。(年齢的にはもうすぐおじいさん)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です