コマンドをCakePHPで作成する

最終更新日時:2010-07-26 18:39:05
CakePHP

概要


Web ベースではなく、コマンドラインで実行する PHP スクリプトにも CakePHP を使うことができます。

使用方法


以下、簡単なサンプルです。

 <?php
 class InsertUserShell extends Shell {
    var $uses = array('User');
 
    function startup() {}
 
    function main() {
        $stdin = fopen("php://stdin", "r");
        if ($stdin) {
            while( ! feof($stdin)) {
                if ($line = trim(fgets($stdin, 1024))) {
                    $lines = explode(',', $line);
                    $insert_data = array("username" => $lines[0], "password" => $lines[1]);
                    $this->User->create();
                    $this->User->save($insert_data);
                }
            }
            fclose($stdin);
        }
    }
 }
 ?>


startup()をオーバーライドすることにより、デフォルトで表示される Welcome to CakePHP・・・のスタートアップ表示が無くなります。

作成した PHP コードは、vendors/shells 以下に保存します。

実行方法


/project/cakephp 以下に CakePHP をインストールし、vendors/shells/insert_user.php という名前で作成した場合には、以下のようにして実行することが出来ます。

 % /project/cakephp/cake/console/cake -app /project/cakephp/app insert_user args1 args2 ...


使用方法で紹介したような標準入力からデータを読み込むようなプログラムの場合には、もちろんパイプ等で渡すことが可能です。

 % cat user.csv | /project/cakephp/cake/console/cake -app /project/cakephp/app insert_user


コンポーネントを使うには


Shellとして使う場合には、普通に以下のような方法ではコンポーネントは使えないようです。

 var $components = array('Auth');


代わりに、以下のようにすると使うことが出来ます。

 App::import('Component', 'Auth');
 function startup() {
     $this->Auth = new AuthComponent($this);
 }


お問い合わせは 掲示板 にて。