文系Webエンジニアの技術メモとたまに旅のメモ

未経験文系エンジニアとして働いてます。アウトプットとして簡単に技術メモを残していきます。たまに旅関係のも趣味で残していこうと思ってます。

【CakePHP3/loadmodel】Modelの数だけloadModelを記述したくない場合は、AppControllerに関数を追加してしまおう。

今回は、CakePHP3系でloadModelを複数書きたくない場合にloadModels関数を作成し、
1行で完結させる方法を記していきます。

1.今回やりたい事

UsersContoller.phpでloadModels関数を使用し、1行で指定したModel全てを使用可能にする。

2.AppControllerでloadModels関数を記述

AppControllerに記述し、どのxxControllerでもloadModelsを使用できるようにします。

AppController.php
<?php
    // 複数モデルの読み込み
    protected function loadModels($models=[])
    {
        foreach ($models as $model) {
            $this->loadModel($model);
        }
    }
?>

3.UsersControllerにloadmodelsの記述

UsersController.phpでloadModels関数を使用します。
今回は、initialize関数内に記述します。

UsersController.php
<?php
    public function initialize()
    {
        parent::initialize();
        $this->loadmodels(['Departments', 'Companies']);

        $this->loadmodels(['Model名}', ['Model名']);
    }
?>

loadModelとloadModelsの記述比較

UsersController.php
<?php
    public function initialize()
    {
        parent::initialize();
        $this->loadmodels(['Departments', 'Companies']);

        $this->loadmodel('Departments');
        $this->loadmodel('Companies');
    }
?>

個人的には、loadModels関数を作成して、一気に読み込んだ方が楽かなと思ってます。