symfonyでタスク
symfonyはご存じの通りwebアプリケーションを作るためのPHPのフレームワークなんだけど、それ以外にも便利なな機能がある。
システムを作るのって、単に表に出てくる機能を作るだけじゃなくて、バックアップだったりデータのメンテナンスだったりってのも含まれるんだけど、バックグラウンドで動くタスク・ジョブを簡単に作れる機能がsymfonyにはある。1.2のリファレンスにcookbookに説明があるので、1.2から出来た機能かも。
ま、このページの説明で大体間に合ってしまう気もするけど、少し説明。
■DBへのアクセス
sfBaseTaskの子クラスの中ではsymfonyのウェブアプリ側で使えるような機能が(多分)全部使える。上記のCookbookには「データベースレイヤーは必要ですか?」っていう見出しの下に
$databaseManager = new sfDatabaseManager($this->configuration);
なんてコードが書いてあるけど、(少なくともsymfony 1.4では)普通にモデルクラス経由でDBアクセスできるので、非常に簡単。
■設定ファイルから値を取得
app.ymlから値を取得するというのは良くある事だと思うけど、そもそもtaskはどのapplication(backend, frontend etc.)に属すものなんだろうか…どうやら、以下のように指定できるらしい。このページを参考。
$this->addOptions(array( // アプリケーション名はfrontend, backend等 new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'アプリケーション名'), new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'), new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'doctrine'), // add your own options here ));
こうして作ったタスクをcronで動かしたり、ジョブスケジューラから動かしたり、なんてすれば立派なシステムへ更に一歩近づけるかな、と。