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で動かしたり、ジョブスケジューラから動かしたり、なんてすれば立派なシステムへ更に一歩近づけるかな、と。 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です