0 follower

コンソールアプリケーション

コンソールアプリケーションは主にウェブアプリケーションで使用されます。 例えばオフラインの作業、例えばコード生成、サーチインデックス編集、メール送信等々です。 Yiiはオブジェクト指向でシステム的にコンソールアプリケーションを書くためのフレームワークを提供しています。

Yiiはコマンドに関して、それぞれのコンソールタスクを意味します。 そして、コンソールアプリケーションインスタンスは コマンドライン要求を適切なコマンドに送るのに用いられます。 アプリケーションインスタンスはエントリスクリプトで作られます。 コンソールタスクを実行するには、以下のようにコマンドラインからコマンドを実行します。

php entryScript.php CommandName Param0 Param1 ...

ここでCommandNameはケースセンシティブなコマンド名で、Param0Param1等はコマンドインスタンスに 渡されるパラメータです。

コンソールアプリケーションのためのエントリスクリプトは通常以下のように書かれます。これは ウェブアプリケーションの場合と似ています。

defined('YII_DEBUG') or define('YII_DEBUG',true);
// Yiiブートストラップファイルを読み込む
require_once('path/to/yii/framework/yii.php');
// アプリケーションインスタンスを生成して実行
$configFile='path/to/config/file.php';
Yii::createConsoleApplication($configFile)->run();

次に、CConsoleCommandから継承されるコマンドクラスを生成します。 それぞれのコマンドクラスは名前の最後にCommandが付くように名付けられるべきです。 例えば、emailコマンドを定義する場合は、EmailCommandクラスを書くことになります。 全てのコマンドクラスファイルは、アプリケーションベースディレクトリの下のcommandsサブディレクトリの下に置かれます。

ヒント: CConsoleApplication::commandMapを構成することにより、 コマンドクラスを異なる命名ルールで名付けることができ、また異なるディレクトリに配置することができます。

コマンドクラスを記述することは、主にCConsoleCommand::runメソッドを実装することが必要です。 コマンドラインパラメータはこのメソッドへの配列として渡されます。以下に一例を示します。

class EmailCommand extends CConsoleCommand
{
    public function run($args)
    {
        $receiver=$args[0];
        // 電子メールを$receiverに送信
    }
}

コマンド実行中いつでも、コンソールアプリケーションインスタンスに、Yii::app()によりアクセスすることが可能です。 ウェブアプリケーションの様に、コンソールアプリケーションも構成可能です。 例えば、データベースにアクセスするため、dbアプリケーションコンポーネントを構成することが可能です。 通常、構成ファイルはPHPファイルとして定義され、コンソールアプリケーションクラスのコンストラクタに渡されるか、 またはエントリスクリプト中において、createConsoleApplicationにより構成されます。

1. yiicツールの使用

最初のアプリケーションを作成するためにyiicツールを使ってきました。 実際、yiicツールはコンソールアプリケーションとして実装され、そのエントリスクリプトファイルはframework/yiic.phpです。 yiicを使うことで、ウェブアプリケーションの骨格自動生成、コントローラクラスやモデルクラスの自動生成、 CRUD操作に必要なコードの自動生成、翻訳するメッセージの抽出等が可能です。

カスタムコマンドを追加することでyiicの拡張が可能です。 そうするためには、最初のアプリケーションを作成するで説明されているように、 yiic webappにより生成された骨格アプリケーションから始めなければなりません。 yiic webappコマンドはyiicyiic.batという2つのファイルをprotectedディレクトリの下に作成します。 これらはyiicツールのローカルバージョンであり、特別にそのウェブ アプリケーションのために作成されたものです。

自分のコマンドをprotected/commandsの下に作成することができます。 ローカルのyiicツールを実行することにより、自分自身のコマンドが標準のコマンドと共に実行するのが確認できます。 自分のコマンドはさらに、yiic shellが実行されたときに使用されるようにすることもできます。そうするためには 自分のコマンドクラスファイルをprotected/commands/shellの下に置くだけです。