Archive for 2010年3月9日
コンソールアプリケーション Yii Framework触るぜ日記(6)
3月 9th
シェルからコマンド打ってガー!
というヤツです。
cronから動かしたりメール受信した際に処理させたりと意外と使う。
今回はコレをYiiでやってみるテストです。
参考にしたのはモチロン(?)choco & moca Yiiのcron jobの作成法と公式です。
今回は公式の方のタイプでやってみましたよ。
流れ
protected/直下にエントリースクリプトを置く。
protected/commands/直下にコマンドクラスを置く。
シェルからGO!!
という流れになります。
エントリースクリプト
まぁ、下記の内容でいいっす。
<?php
defined('YII_DEBUG') or define('YII_DEBUG',true);
require_once('/path/to/framework/yii.php');
$config = dirname(__FILE__).'/config/main.php';
Yii::createConsoleApplication($config)->run();
これを適当な名前でprotected直下においてくださいな。
とりあえず今回はcui.phpとして保存しました。
コマンドクラス
CConsoleCommandを継承したコマンドクラスを用意します。
このコマンドクラスをprotected/commands/の下に置く。
クラス名にCommand付けないとアレです。
<?php
class sampleCommand extends CConsoleCommand
{
public function run( $args )
{
echo('sample'."\n");
}
}
これをprotected/commands/sampleCommand.phpとして保存。
ファイル名にもCommandが必要です。
シェルからGO!
あとはシェルから入れればOKです
php ./protected/cui.php sample
これでsampleって表示されるよ!
おまけ
main.phpに設定するとCommand付けるとかいう気持ち悪さ(?)から開放されます。
protected/config/main.phpに設定を追加。
'commandMap'=>array( 'sample'=>'application.commands.sample' ),
これでクラス名やファイル名にsampleってつけなくてよくなりますよ。
クラスファイルを設置するディレクトリも自由になります。
まぁ、Commandつける方が早いけどね!!!
追記:3/11 嘘です。
commandMapを設定すると通常のwebアプリの方で「commandMapなんて設定されてねーよ」エラーが出ます。
設定するなら、エントリースクリプト(この例だとcui.php)の方で$config['commandMap'] = array(‘コマンド’);って指定する必要がありますね。
ゴメンちょ(´・ω・`)