CakePHP2でshellを使う

利用方法は変わっていないようだけど、フォルダの構成とか変わった。

1.CakePHP1.X系から変わったことから。

・shellファイルの設置場所が変わった
1.X /app/vendors/shells
2.X /app/Console/Command

・ファイル名の命名規則が変わった
例)クラス名が「HogeHogeShell」の場合
1.X hogehoge.php
2.X hogehogeShell.php

shellファイルの場所が変わったのは大きいかな。

2.shellを動かしてみる。

呼び出し方は以前と同じ

phpまでのパス [libまでのパス]/lib/Cake/Console/cake.php シェルのコントローラ名(Shellの部分を除く) アクション名(記載しない場合はmainアクションを見に行く) appまでのパス

こんな感じ

$ php /var/www/lib/Cake/Console/cake.php hogehoge exec /var/www/app/

動作させると以下のようなメッセージが出た後、処理が実行される
Welcome to CakePHP v2.0.5 Console
—————————————————————
App : app
Path: /var/www/app/
—————————————————————
~ここから処理の内容~

基本的な使い方もついでにメモしておく。

3.shellにcontrollerの処理を追加してみる

<?php
App::uses('IndexController','Controller');

class HogeHogeShell extends Shell {
    $controller = null;
    public function startup() {
        parent::startup();
        $this->controller = new IndexController();
    }
}

4.shellにcomponentの処理を追加してみる

2系から$this->Components->load(‘コンポーネント名’);でロードできるようになった。

<?php
App::uses('IndexController','Controller');

class HogeHogeShell extends Shell {
    $controller = null;
    public function startup() {
        parent::startup();
        $this->controller = new IndexController();
        $this->fugafuga   = $this->Controller->Components->load('Fugafuga');
    }
}

5.shellにmodelの処理を追加してみる

<?php
class HogeHogeShell extends Shell {
    public $uses = array('Test');
    public function startup() {
        parent::startup();
        $result = $this->Test->find('all');
    }
}