Laravel Tinker’da Job Dispatch Etmek veya Laravel Tinker Neden Job’ları Dispatch Etmiyor?
Bu makale ben (Yunus Emre Deligöz) ve Turan Karatuğ tarafından yazılmıştır. İngilizce dilinde ve ayrıca blogum ü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 İlk 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.