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でやればいいんじゃね?