最近(というか今日)引き継いだプログラムを読んでいて発見したのですが、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 インスタンスも作成し、引数に渡してくれます。
この例ではクラス関数を使っても同じことができますが、せっかくクラスにまとめたのにクラス関数にしてしまうのも何だろうなあと思っていたので、結構目からうろこでした。
追記: 参考記事を見ると、データインジェクションの方法(毎回インスタンス化するか、シングルトンにするかなど)も変更できるようです。
コメントを残す