symfony1.1.1 のカスタムタスクでPropelが利用できずに困った
カスタムタスクって何?
symfony 1.1 から導入されたsymfonyをコマンドラインから利用するためのもの。1.1以前のバッチスクリプトのようにsymfonyのライブラリにアクセスできるそうです。
カスタムタスク生成コマンド
symfony generate:task [ネームスペース]:[タスク名]
例)
symfony generate:task hoge:fuga
これで lib/task の中にカスタムタスクが生成されます。
あとは、生成されたファイルの中の '// add code here' ってところに、自分のやりたいこと書いてくだけ。ラクチン。
実行するには下記のコマンドを叩く
symfony [ネームスペース]:[タスク名]
例)
symfony hoge:fuga
Propel使えないよ
当然のようにPropel使おうとしたんだけど
No connection params set for propel
って怒られました。
なんかググっても要領を得なかったので、素直にソースを調べると "sfGenerateTaskTask.class.php" に生成コードの雛型が入ってました。
どうやら、Propelを利用する場合と、利用しない場合の雛型があるようで、そのスイッチオプションは 'use-database' のようです。
改めて、カスタムタスク生成コマンド
symfony generate:task [ネームスペース]:[タスク名] --use-database=false
例)
symfony generate:task hoge:fuga --use-database=false
これで、Propelが使えるカスタムタスクが生成されます。
なんで、'--use-database=false' なのかは僕にはわかりません。'true'じゃないと気持ち悪いんですがね。
まぁ、問題があればそのうち修正されるんじゃないですか。
こっちを実行するにはアプリケーション名を引数で与える必要があるようです。
symfony [ネームスペース]:[タスク名] [アプリケーション名]
例)
symfony hoge:fuga frontend
生成されたカスタムタスクソース
<?php
class hogeFugaTask extends sfPropelBaseTask
{
protected function configure()
{
$this->namespace = 'hoge';
$this->name = 'fuga';
$this->briefDescription = '';
$this->detailedDescription = <<<EOF
The [reminder:get-source|INFO] task does things.
Call it with:
[php symfony reminder:get-source|INFO]
EOF;
$this->addArgument('application', sfCommandArgument::REQUIRED, 'The application name');
// add other arguments here
$this->addOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev');
$this->addOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel');
// add other options here
}
protected function execute($arguments = array(), $options = array())
{
// Database initialization
$databaseManager = new sfDatabaseManager($this->configuration);
$connection = Propel::getConnection($options['connection'] ? $options['connection'] : '');
// add code here
}
}
--仕様がコロコロ変わるとつらいなぁ。
About this entry
Archive type
Individual archive
Published
2008/08/27 19:18
0 Comments