2017-06-07 20 views
2

laravel 4では、クロージャーをqueue::push(function...)でキューにプッシュできましたが、これはlaravel 5では機能しなくなりました。代わりに、キューにプッシュしたいすべての関数に対してカスタムJobクラスを作成する必要があるようです。laravel 5にクロージャをディスパッチする方法はありますか?

私はプッシュしたい機能は、長い行の唯一のカップルです、としか正確に一つの場所で使用されているので、それは本当にすべてのケースのための完全なクラスを書くことに時間と空間の無駄のように思えます。

私が考えることができる最良のソリューションは、呼び出されたときに新しいクラスを動的に生成するためにPHPのリフレクションメソッドを使用するか、クロージャをパラメータとして受け入れるジェネリックジョブを持つヘルパー関数を持つことです。つまり、dispatch(new ClosureJob(function(){...}));

これは私にとって理想的ではないようです。これを行う別の方法がありますか?あるいは、私はこれらのいずれかを実装する必要がありますか?

+0

どのようにあなたが最後でこれを解決しました:

class QueueableClosure extends SerializableClosure { public function handle() { call_user_func_array($this->closure, func_get_args()); } } 

次に、このようにそれを使うのか? – GGGforce

+0

@GGGforce各機能のカスタムジョブ。私は今のうち約30を持っている。それは賢明な何かをしようとするよりも簡単ではないからです。 – Benubird

+0

を参照してください。私の答えをチェックアウトしてください。たぶん役立つでしょう。 – GGGforce

答えて

1

これは、OpisClosureライブラリに依存してこれを達成しました。ようにクラスを拡張:

Queue::push(new QueueableClosure(function(){ 
    Log::debug("this is the QueueableClosure in action."); 
})); 
関連する問題