Notice: Undefined index: adsensem-show-ad in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 280

Notice: wp_enqueue_script was called incorrectly. Scripts and styles should not be registered or enqueued until the wp_enqueue_scripts, admin_enqueue_scripts, or login_enqueue_scripts hooks. Please see Debugging in WordPress for more information. (This message was added in version 3.3.) in /home/araki/blog.ceed.jp/wp-includes/functions.php on line 3361

Strict Standards: Redefining already defined constructor for class SyntaxHighlighter in /home/araki/blog.ceed.jp/wp-content/plugins/syntax-highlighter/syntax_highlighter.php on line 118

Strict Standards: Redefining already defined constructor for class wokScriptManager in /home/araki/blog.ceed.jp/wp-content/plugins/syntax-highlighter/includes/common-controller.php on line 315

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method adsensem::init() should not be called statically in /home/araki/blog.ceed.jp/wp-includes/plugin.php on line 470

Strict Standards: Non-static method adsensem::setup_is_valid() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 110

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method adsensem::init_widgets() should not be called statically in /home/araki/blog.ceed.jp/wp-includes/plugin.php on line 470

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 145

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 145

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162
CakePHPでコンソールアプリを作る | CEED
Notice: Use of undefined constant user_level - assumed 'user_level' in /home/araki/blog.ceed.jp/wp-content/plugins/ultimate_ga_1.6.0/ultimate_ga_1.6.0.php on line 524

CakePHPでコンソールアプリを作る


Notice: get_settings の使用はバージョン 2.1 から非推奨になっています! 代わりに get_option() を使ってください。 in /home/araki/blog.ceed.jp/wp-includes/functions.php on line 3194

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method adsensem::filter_ads() should not be called statically in /home/araki/blog.ceed.jp/wp-includes/plugin.php on line 192

Strict Standards: Non-static method adsensem::filter_ad_callback() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 198

Strict Standards: Non-static method adsensem::filter_ad_callback() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 201

Notice: Use of undefined constant user_level - assumed 'user_level' in /home/araki/blog.ceed.jp/wp-content/plugins/ultimate_ga_1.6.0/ultimate_ga_1.6.0.php on line 524

PHPでコマンドランの簡単な処理を作ることになったので、せっかくなのでCakePHPのShellを使ってみました。
ブログなどでの取り上げも少ないようなのでちょっと覚書的に書いておこうと思います。
使い方は非常に簡単で、/app/vendors/shells/ に、test.php のような名前でファイルを作ります。
このファイルの中身は、Shellクラスをオーバーライドしたものとします。
例えばこんな感じです。

<?php
class TestShell extends Shell{
	private $_str = array(
			'construct' => 'コンストラクト',
			'initialize' => '初期化処理',
			'startup' => '開始処理',
			'main' => '基本処理',
			'choise' => '選択してください',
			'suspend' => '中止されました',
			'openFile' => 'ファイルを開いて表示します。パスを入力してください。:'
		);

	function initialize(){
		mb_convert_variables('SJIS', 'UTF-8', $this->_str);
		$this->out($this->_str['initialize']);
	}
	function startup(){
		$this->out($this->_str['startup']);
	}
	function main(){
		if($this->in($this->_str['choise'], array('y','q'), 'y') == 'q'){
			$this->error('line:'.__LINE__.' on '.__FILE__, $this->_str['suspend']);
		}else{
			$this->hr(1);
			$this->out($this->_str['main']);
			$this->hr(1);
			$input = $this->in($this->_str['openFile']);
			echo file_get_contents($input);
		}
	}
}
?>

コマンドラインからのアクセスには、

cake シェルのクラス名 メソッド名 引数1 引数2,,,,

のようになります。メソッド名を省略すると、mainメソッドが呼ばれます。
一番最初の cake は /cake/console/ 配下にあるコマンドなので、あらかじめ /cake/console を環境変数に入れておいた方が使いやすいでしょう。
その上で、APPのディレクトリに移動して上記のようにコマンドをたたきます。
また、別の方法として

cake -app APPへのパス シェルのクラス名 メソッド名 引数1 引数2,,,,

のように明示的に指定すると、どこからでもアクセスできます。

Shellクラスにはコンポーネントと同様に、startup, initialize 等のコールバックメソッドが用意されていますので、初期化処理や定型処理を書いておくのもいいかもしれません。
また、コントローラと同様に、$uses メンバ変数で使用するモデルを指定できるので、コントローラで行う処理と同じ感覚でモデルのデータにアクセスできます。

Windowsのコマンドラインから使用する場合、文字コードがSJISになるので、今回は上記のように、メンバ変数に使用するメッセージ文言を定義しましたが、CakePHPのLocale機能を使って、

$this->in(__get('openFile'));

のようにするとより綺麗かも知れません。

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Notice: Use of undefined constant user_level - assumed 'user_level' in /home/araki/blog.ceed.jp/wp-content/plugins/ultimate_ga_1.6.0/ultimate_ga_1.6.0.php on line 524

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method adsensem::footer() should not be called statically in /home/araki/blog.ceed.jp/wp-includes/plugin.php on line 470
getting health insurance in new york buy clomid online UK major health insurance companies buy levitra uk online what are wells fargo hours buy finasteride affordable health insurance for children accutane no prescription medical center of trinity viagra online uten resept midwestern university wellness center dapoxetine top individual health insurance companies viagra ireland

Notice: Use of undefined constant user_level - assumed 'user_level' in /home/araki/blog.ceed.jp/wp-content/plugins/ultimate_ga_1.6.0/ultimate_ga_1.6.0.php on line 524