Makaleler Kod Parçaları Projeler

Laravel Tinker'da Job Dispatch Etmek

Laravel Tinker neden job'ları dispatch etmiyor?

5 Ağustos '22 1 hafta önce

3 dk 403 kelime

Bu makale ben (Yunus Emre Deligöz) ve Turan Karatuğ tarafından yazılmıştır. İngilizce dilinde ve ayrıca Medium üzerinde okunabilir.

Uzun Lafın Kısası

Dispatch komutundan hemen sonra, sadece, ;1 eklemeniz yeterli.

SendEmailJob::dispatch();1;

Laravel Tinker üzerinden Job’ları Dispatch Etmek

Laravel Artisan Tinker üzerinde kuyruğa bir Job göndermek istiyorsanız, Tinker'ı açıp şöyle yazarsınız:

SendEmailJob::dispatch();

Ve Job'un aslında kuyruğa gönderilmediğini farkedersiniz. Komutu yeniden çalıştırırsanız aynı yanıtı görürsünüz ancak Job kuyruğa yalnızca bir kez gönderilmiştir.

Laravel Tinker Job’u neden ilk seferde dispatch etmedi?

Buradaki sorun Laravel Tinker'in oluşturulan PendingDispatch nesnelerini kullanıcının sonraki komutlarda kullanması için bellekte tutmasıdır. PendingDispatch nesnesi yok edildiğinde Job dispatch edilir.

Bu konudaki tartışmalar için Laravel Tinker Repo'suna göz atabilirsiniz.

Çözüm

Bu problemi en doğru şekilde çözmek için Job'u Laravel'in Dispatcher sınıfı üzerinden gönderebilirsiniz:

app(\Illuminate\Contracts\Bus\Dispatcher::class)
  ->dispatch(new SendEmailJob());

Hızlıca çözmek içinse:

SendEmailJob::dispatch();1

Komutun sonuna ;1 eklediğinizde, Tinker PendingDispatch nesnelerini bellekte tutmayacak ve bu da Job'ların hemen dispatch edilmesini sağlayacaktır.