Метод handle у Job в Laravel
Вся полезная работа Job живёт
в методе handle. Его
вызовет worker (или sync-
драйвер), когда дойдёт очередь
до этого задания. Конструктор
только принимает данные - модель,
id, путь к файлу.
Пример: job получает пользователя
и в handle пишет в лог
(вместо реальной почты - для учёбы):
<?php
namespace App\Jobs;
use App\Models\User;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Support\Facades\Log;
class SendWelcomeEmail implements ShouldQueue
{
use Queueable;
public function __construct(
public User $user
) {}
public function handle(): void
{
Log::info('Welcome for '.$this->user->email);
}
}
?>
Вместо Log::info можно
отправить Mailable, дернуть API,
сохранить файл - что угодно,
что не должно блокировать ответ
страницы. Главное: handle
должен завершаться сам; долгие
циклы без нужды лучше дробить
на несколько job.
Данные из конструктора доступны
как свойства объекта
($this->user в примере).
Laravel сериализует модель при
постановке в очередь и снова
достанет её, когда worker
вызовет handle.
В handle своего Job
запишите сообщение в лог.
Передайте в конструктор модель
или id и используйте их
в handle.
Кто вызывает handle -
контроллер или worker?