ComponentでloadModelが使いたい
Controllerではいつも意識せず$this->loadModel('modelName')
を使っていたんですが、
Componentだとそれができず、仕方なく$this->modelName = new TableRegistry::get('modelName')
と書いていました。
HogeComponent.php
<?php
namespace App\Controller\Component;
use Cake\Controller\Component;
class HogeComponent extends Component
{
public function init()
{
$this->modelName = new TableRegistry::get('modelName'); // OK
$this->loadModel('modelName'); // エラー
}
}
でもloadModel
使いたいなーと思ったので、ちょっと調べたメモを投稿しておきます。
loadModelの実装
そもそもloadModel
って誰が実装しているメソッドなの?と言うところから調べてみたのですが、どうやらController.phpがuseしているModelAwareTrait
が持っている様子。
Controller.phpはAppControllerの親なので、AppControllerを継承していれば、各Controllerで$this->loadModel('modelName')
が呼べる、と言うことでした。
なので、ComponentでもModelAwareTrait
をuseすれば使えるはず。
実際に書いてみた
HogeComponent.php
<?php
namespace App\Controller\Component;
use Cake\Controller\Component;
use Cake\Datasource\ModelAwareTrait;
class HogeComponent extends Component
{
// loadModel()を使うために読み込む
use ModelAwareTrait;
public function init()
{
$this->modelName = new TableRegistry::get('modelName'); // OK
$this->loadModel('modelName'); //OK
}
}
と言うことで、ModelAwareTrait
を読み込むだけでOKでした。