はじめに
こんにちは@kou_hoshです。 最近はCakePHPのShellと戯れる機会が多いです。 フロントエンド側と比較すると地味目ではありますが 機能が充実していてとても便利だなと改めて思います。
というわけで今回はCakePHPのShellへのオプションの渡し方をやっていこうと思います。 (CakePHP 2.x系です)
基本的な使い方
基本的な実装方法は下記のような形です。 getOptionParser()メソッドをオーバライドしてその中でオプション設定を加えていきます。
・ソース
<?php class SampleShell extends AppShell { public function main() { var_dump($this->params['sample']); } public function getOptionParser() { $parser = parent::getOptionParser(); $parser->addOption('sample', array( 'help' => 'sample option', )); return $parser; } }
実行時は下記の様にオプションを付与すると $this->params連想配列の中に格納されます。
・実行結果
$ /bin/sh Console/cake sample --sample on string(2) "on"
また誤ったオプションを指定したりすると、下記のようにCakeが教えてくれます。(あら便利)
・実行結果
$ /bin/sh Console/cake sample --detarame on Usage: cake sample [-h] [-v] [-q] [--sample] Options: --help, -h Display this help. --verbose, -v Enable verbose output. --quiet, -q Enable quiet output. --sample sample option
オプション機能のオプション
上記のような基本的な使い方以外にも便利な機能があります。
短縮オプション
オプションのパラメータを指定する際に下記のようにshortに値を指定すると その値を短縮形として使用出来ます。
・ソース
<?php public function getOptionParser() { $parser = parent::getOptionParser(); $parser->addOption('sample', array( 'short' => 's', 'help' => 'sample option', )); return $parser; }
・実行結果
$ /bin/sh Console/cake sample -s on string(2) "on"
バリデーション
オプションのパラメータを指定する際に下記のようにchoicesに値を指定すると その値以外を受け付けないようにできます。
・ソース
<?php public function getOptionParser() { $parser = parent::getOptionParser(); $parser->addOption('sample', array( 'choices' => array('on', 'off'), 'help' => 'sample option', )); return $parser; }
・実行結果
$ /bin/sh Console/cake sample --sample off string(3) "off" $ /bin/sh Console/cake sample --sample false Usage: cake sample [-h] [-v] [-q] [--sample on|off] Options: --help, -h Display this help. --verbose, -v Enable verbose output. --quiet, -q Enable quiet output. --sample sample option (choices: on|off) [/shell]
参照
・・・というような役立ちそうなことがCakePHPのCookbookにはたくさん書いてありますので 公式ドキュメントをどんどん読んでいきましょう!