【メモ】Symfony1.4でのバッチ処理


自分でしっかり理解しているとは言い難いので自信がないけど一応メモ書き。



Symfony1.2以降ではタスクを使用することでバッチ処理が書けるらしい。
(1.0系ではinit-batch的な何かだった)

Symfony1.4(Symfony1.3)でバッチ処理 » 森の夢

「generate:task」コマンドを使ってタスクを作成したあと、

symfony generate:task helloworld

設定と処理を書いてあげれば、

symfony batch:helloworld

という感じで実行できるという話。

おー。1.0系に比べると随分と楽。
当然、cronもそれで動く。



任意のmoduleの任意のactionを動作させるには

Symfony Tasks: Getting the output of a module / action – efreedom

タスク設定内の「application」に第5引数としてアプリケーション名を追加。

new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'batch');

タスクの処理に以下を追加。

sfContext::createInstance($this->configuration);
sfContext::getInstance()->getController()->getPresentationFor('module', 'action');

これで、アプリケーション「batch」内の「module」モジュールの「action」アクションが呼ばれる。簡単な処理ならばタスクに直書きで良いけど複雑なのになったらこうしたい…と思うよね?と思ったけど見つけるのに苦労した。こういうのは、邪道なのかな。いや違うか、改めて書くまでもないほどよく知られてるってことか。「sfContext」を作る=それを使っていろいろできる的な意味で。



ドキュメント

その他、いろいろと参考になる情報がドキュメントにも。

The More with symfony book | コマンドラインとタスクの活用 | symfony | Web PHP Framework