CakePHPコンソールのシェルを作るときのメモ

CakePHP1.2での話。ドキュメントにも詳しく書かれていないのでソースを見ながら使い方を探る。

シェルやタスクって何よ?&基本的な使い方

とりあえずはドキュメントを読みましょう。そうすれば、ファイルの作成方法、配置、呼び出し方については分かります。
http://book.cakephp.org/ja/view/110/Creating-Shells-Tasks

実行結果をファイルに保存するとファイルの先頭にエスケープ文字が入る

linux環境で実行するときは

$cake shellfile > log.txt

のようにリダイレクトするとファイルの先頭にエスケープ文字列が含まれる場合があります。
これは/cake/console/cakeファイルのclearコマンドが原因なので、エスケープしておきます。

* /cake/console/cake

# escape clear command
#clear

LIB=${0/%cake/}
APP=`pwd`

exec php -q ${LIB}cake.php -working "${APP}" "$@"
          
exit;    

メッセージを出力する

通常は標準出力で、エラーがあるときは標準エラー出力にしたい場合などは既に用意された以下のメソッドを利用するとよい。

<?php
// 出力する
$this->out('標準出力したいメッセージ');
$this->err('標準エラー出力したいメッセージ');

// 出力後に自動改行したくない場合は第2引数でfalseを渡す
$this->out('改行せずに標準出力したいメッセージ', false);

// 「---」の文字列で区切り線を出力したい場合
$this->hr();

シェルを終了する

<?php
// シェルを異常終了させたい場合
//  (内部的に次の_stopメソッドを呼び出してシェルを終了している)
$this->error('タイトル', 'メッセージ');

// シェルをステータスを指定して終了させたい場合
//  (アンスコで始まるメソッドなのでPHP5でいうprotectedなメソッドを意味すると思われる)
$this->_stop('ステータスコード');


symfonyほど作り込まれた機能ではないけど、最低限必要な機能は用意されている印象。