普通のComponentを使う場合は、「PHPで作る携帯サイト」本とかWEB上にも載っていた。
そのComponentが別のComponentを使用している場合では、実行時にObjectがないって怒られてしまう。
どうしていいのか検討がつかなかったので、masapさんに相談してみたときのメモ。
masapさんに感謝。
通常の場合
App::import('Component', 'コンポーネント名'); class HogeShell extends Shell{ public $uses = array(モデル); function startup{ $this->コンポーネント名 = new コンポーネント名Component($this); } function main(){ // メインの処理 } }
通常であればのこれでOK。
Componentに依存関係がある場合
具体的には、Componentがさらに別のComponentを使っている場合です。
ContollerをnewしてconstructClasses()、そしてControllerがもっているCompontを使います。
constructClasses()は階層も含めてusesとcomponentをつくってくれるそうです。
作りながら気づいていたのですが、専用のControllerをつくったほうがよさそうです。。App::import('Core', 'Controller'); App::import('Controller', 'App'); class HogeShell extends Shell{ public $uses = array(モデル); function startup{ $this->controller = new AppController(); $this->controller->components = array('Example'); $this->controller->constructClasses(); $this->Example = $this->controller->Example; } function main(){ // メインの処理 $this->Example->hogehoge(); } }以下のようにした方がいいかもしれません。
確認はしていませんが。。class HogeController extends AppController{ public $components = array('Example'); }App::import('Core', 'Controller'); App::import('Controller', 'Hoge'); class HogeShell extends Shell{ public $uses = array(モデル); function startup{ $this->controller = new HogeController(); $this->controller->constructClasses(); $this->Example = $this->controller->Example; } function main(){ // メインの処理 $this->Example->hogehoge(); } }。。。