[CakePHP 2.x] shell(シェル)からComponent(コンポーネント)を呼び出す

  • 18
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

cake初めて一週間。shellからComponentを呼び出したいところで、コツがあったのでメモ。
OnakahettaShell.php から TamagoyakiComponent.php を呼び出します。

<?php
App::uses('ComponentCollection', 'Controller'); //これが大事
App::uses('TamagoyakiComponent', 'Controller/Component'); 
// ↑このHogeComponentとapp/Controller/Component以下の呼び出したいファイルの『クラスの名前』が一致しているか確認。(まあ基本はクラスとファイル名は一致させる)

/**
* こういうクラス ちなみにAppShellがShellを継承している
*/
class OnakahettaShell extends AppShell {

    /**
    * TamagoyakiComponent.phpの呼び出し
    */
    public function startup() {
        $collection = new ComponentCollection(); //これが大事です。
        $this->Hoge = new TamagoyakiComponent($collection); //コンポーネントをインスタンス化
        parent::startup();
    }

    /**
     * メイン処理
     */
    public function main() {
        $monya = $this->Tamagoyaki->__fuga(); 
        //↑こんな感じで使えます◎

        Debugger::log($this); // 出力内容は下に記載
        Debugger::log($this->Tamagoyaki); //出力内容は下に

ちなみにAppShellはShellを継承しています。

app/console/Command/AppShell.php
<?php
App::uses('Shell', 'Console');
class AppShell extends Shell {
}
Debugger
object(OnakahettaShell) {
        uses => array()
         .
         .
        Tamagoyaki => object(TamagoyakiComponent) {} <-いた!!
         .
         .
}
Debugger
object(TamagoyakiComponent) {
        components => array()
        settings => array()
        [protected] _Collection => object(ComponentCollection) {}
        [protected] _componentMap => array()
}