前回の続きでFuelPHPネタ。APIの書き方は理解して且つレンタルサーバ上のPHPコマンドのバージョンも上げられたのでFuelPHPをcomposerで入れられるようにもなった。
で、次はバッチ処理。スクレイピングとか画像処理なんかをDBに突っ込んであるキューを元に処理していきたいのでバッチ処理が使えないと話にならんということで早速書いてみる。
app/test.hoge.com/fuel/app/tasks/hello.php
namespace Fuel\Tasks;
class Hello
{
public static function run()
{
echo 'hello', PHP_EOL;
}
public static function execute($args1 = "fuga", $args2 = "hoge")
{
echo 'hello, ' . $args1 . ':' . $args2, PHP_EOL;
}
}
namespace Fuel\Tasks;
class Hello
{
public static function run()
{
echo 'hello', PHP_EOL;
}
public static function execute($args1 = "fuga", $args2 = "hoge")
{
echo 'hello, ' . $args1 . ':' . $args2, PHP_EOL;
}
}
バッチは fuel/app/tasks/ 配下に書く決まりらしい。run()メソッドはバッチクラスのメインメソッドで実行時にメソッド名無しに呼び出してくれる。ほとんどはこのrun()メソッドに実装すれば良さそう。ちなみにクラスメソッドでもインスタンスメソッドでも動いた。
同一バッチクラスに実行メソッドを複数実装することも可能。上の例だとexecute()メソッドがそれ。引数も指定可能でメソッドの引数分、コマンド実行時に受け取れる模様。
それでは実行してみますかね。
$ php oil refine hello
hello
$ php oil refine hello:execute japan world
hello, japan:world
hello
$ php oil refine hello:execute japan world
hello, japan:world
Oilコマンドを使ってそれぞれ実行。ふむふむ、バッチも簡単に実装できるんだね。ただ fuel/app/tasks/ 配下にサブディレクトリを作っての実行はできなかった。調べてみるとこれはFuelPHP2.0で対応予定らしい。
そう言えばタスククラスのメソッドはクラスメソッドでもインスタンスメソッドでもどちらでも動く訳だけど、どっちが良いんだろうね?生成しないで使える分クラスメソッドで書いた方が早いとは思うけど幾つも生成する訳でもないし、違いは無いのかな?
残りはDB周り、ログ、定義ファイル周りをチェック。また次回。