2016-08-15 11 views
0

ShouldQueueとSyncをクラス内でどのように切り替えるのですか?キューとキューとの間でLaravelを切り替える

私たちは仕事がすぐ以降解雇すべきかどうかの引数を受け入れエンドポイントを持っています。

どちらの場合も同じロジックが実行されなければならないが、1つのシナリオでは、私は期待して戻って答えると、他の一つは非同期に処理する必要があります。

私は「ShouldQueue」を実施すると認識しています「InteractsWithQueue」-Traitを使用しますが、どのように我々は1つの状況でこれを使用し、他で使用することはできませんか?

は、あなたがプログラム的に要求がキューイングされるべきかどうかを設定するか、しないか、またはこれを行うには良い方法がありますができますか?お使いのコントローラのおかげで

+0

はまだ自分自身でこれをテストしていません

use Illuminate\Contracts\Bus\Dispatcher; // Later ... app(Dispatcher::class)->dispatchNow($job); 
ことができますが、ジョブクラスをインスタンス化し、直ちに実行する必要がある場合、または「オンライン」にする必要がある場合は、コントローラの 'handle()'メソッドを呼び出します。キュー内で実行する場合や、「オフライン」で実行したい場合は、ディスパッチャを使用して通常どおりキューに入れることができます。 – stratedge

+0

@xjstratedgebxはい、これは動作しますが、両方の場合にどのように変数を渡すのですか?ディスパッチの場合は、コンストラクタ、ハンドルのハンドルメソッドで期待されます。 – hogan

+0

サービスコンテナ( '$ job = app(\ App \ Jobs \ MyJob :: class);')でジョブクラスを解決すると、コンストラクタにヒントを入力したクラスが自動的に渡されます。 'handle()'を手動で呼び出すとパラメータを渡す必要がある場合は、呼び出すときにパラメータを渡すだけです。キューに入れるときにそれらのパラメータを心配する必要はありません - 私はサービスコンテナが自動的にキューから実行するときにパラメータを注入すると思います。 – stratedge

答えて

2

:Laravel 5.1に付着した場合は

$this->dispatch($job) // queued if implements ShouldQueue 

$this->dispatchNow($job) // never queues 

は、Dispatcher自分の新しいインスタンスを作成します。

+0

こんにちはJoseph、これは本当に良いことでした。 dispatchNowは関数ではありません。これが機能するには何か他のものが必要ですか? – hogan

+0

@hogan Laravelのどのバージョンをお使いですか?それは少なくとも5.2です([here](https://laravel.com/api/5.2/Illuminate/Foundation/Bus/DispatchesJobs.html#method_dispatchNow)を参照))。それはapp(\ Illuminate \ Contracts \ Bus \ Dispatcher :: class) - > dispatchNow($ job)です。 –

+1

@hogan - Laravelの以前のバージョンからアップグレードした場合は、コントローラ内の 'Illuminate/Foundation/Bus/DispatchesJobs'特性を使用してください。 –

関連する問題