[CakePHP1.2]shellクラスの継承時にModelが読み込まれない

cakephp-604x270
今更CakePHP1.2を使っている人は少ないと思いますが、一応メモとして残しておきます。

Shellクラスで親クラスを作って、それを継承させた場合、なぜかusesで指定したモデルが登録されていませんでした。
(ちなみにCakePHP2.xで同じことをした場合は特に問題なく普通に使えました)
Google先生でいろいろ調べてみたのですが解決策が見つからず、ソースコードを読もうかどうしようかと思っていましたが、
以下の方法で解決しました。
親クラスでAppControllerをロードして、LoadModelメソッドで読み込み

App::import('Core', 'Controller');
App::import('Controller', 'App');
App::import('Core', 'Model');
App::import('Core', 'View');
class MyShell extends Shell {
var $uses = array('Model1','Model2');
function startup(){
    parent::startup();
	$this->Controller = new Controller();
        $this->AppController = new AppController();
	//モデルをロード
	foreach($this->uses as $val){
		$this->AppController->loadModel($val);
	}
}
}

子クラスでは以下のようにAppControllerを付けてModelを読み込みます。

$this->AppController->Model1->find();

いまいち腑に落ちない仕様ですが、まぁ動けば良しとしましょう。

タイトルとURLをコピーしました