cronとかの書き方

サーバ側の自動処理なんかをCakePHPで書きたいときにどうするかというお話。Cronとか。
APPはアプリのパス、COREはCakePHPおいてるところね。

■STEP 1 - APP/vendor/shellsにまずはディスパッチャを置く。

例えばcron.phpというファイルにCronShellというクラスを書いておくと

 cake cron

とやるとcake bakeやるときのように実行できる。

■STEP 2 - Taskを書く(コントローラでいうところのAction)

STEP 1で書いたCronShellクラスにmain()関数を作って、そこで処理を呼び出す。
ハンドリングしたいならパラメータをパースして適当によしなにする。
実際の処理はAPP/vendor/shells/tasks/test.phpみたく、shells/tasksの中に置いておく。
同じShellクラスの継承だが、名前は*Taskにしておくこと。
CORE/console/libs/bake.phpのコードを参考にすると良い。

APP/vendor/shells/cron.php

class CronShell extends Shell{
    var $tasks = array('test'); /* 呼び出すTaskを列挙しておく */
    function main(){
        $this->Test->execute();
        exit(0); /* Shellだからいちおうリターンコード返しておく */
    }
}
APP/vendor/shells/tasks/test.php

class TestTask extend Shell {
    var $uses = array('Hoge');  /* HogeModelを使うことにする */
    function execute(){
        $r = $this->Hoge->findAll();
        var_dump( $r );
    }
}

■その他のネタ

  • templateがあるっぽいがいまいち使いどころわからんちん
  • ShellクラスはObjectクラスの継承になってるのでrequestActionメソッドが叩けるw
  • コントローラが存在しないので、コンポーネントが使えないっぽい。->vendorでやればいいんじゃね?