2系になってからシェルを作ってなかったので、メモがてら残しておこう。

ファイルの保存場所は app/Console/Command/

AppStoreShell.php
<?php
class AppStoreShell extends AppShell {
public function main(){
$this->out('Hello, AppStore');
  }
public function test(){
$this->out('test dayo');
}
}

ファイル名、クラス名はキャメルケースで付けるのが2系。

コントローラだとデフォルトアクションがindex()だけど、シェルはmain()だと思えばおk。


コンソールのコマンドラインから直接実行する場合は、以下の形式で実行できる。

$ cake -app /path/to/app app_store
Welcome to CakePHP v2.1.3 Console
---------------------------------------------------------------
App : app
Path: /path/to/app/
---------------------------------------------------------------
Hello, AppStore

$ cake -app /path/to/app app_store test

上記例のクラス名がAppStoreShellなので、渡す引数のクラス名はapp_storeである。

class AppstoreShell〜だったらappstoreになるよ。

※/path/to/appはCakePHPを展開したディレクトリ
※cakeにパスが通っていない場合は.bash_profileなどでPATH=/path/to/lib/Cake/Console
※ちなみに、ユーザファイルのapp/Console/cakeでもOK(かも)
※どこからでもcakeコマンドは実行できるようになるが、結局-appでCakePHPのapp/ディレクトリを指定していないと変なエラーがでる(気がする) 


cronで実行させる場合

$ crontab -e
* * * * * /usr/local/bin/php /path/to/app/Console/cake.php app_store > /dev/null 2>&1
Consoleの下にcake.phpがあるのでそれを実行する。