Команда make:job
Команда make:job создаёт новый класс задачи в директории app/Jobs. Задачи используются для выполнения отложенных или фоновых операций через очереди. Первым параметром передаётся имя класса задачи. По умолчанию класс реализует интерфейс ShouldQueue, что позволяет отправлять задачу в очередь. Метод handle выполняется при обработке задачи.
Синтаксис
php artisan make:job JobName
Пример
Создадим задачу для отправки уведомления пользователю:
<?php
namespace AppJobs;
use AppModelsUser;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
class SendNotification implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
protected $user;
protected $message;
public function __construct(User $user, $message)
{
$this->user = $user;
$this->message = $message;
}
public function handle()
{
// Logic to send notification
echo "Notification sent to: " . $this->user->email;
echo "Message: " . $this->message;
}
}
?>
Теперь используем эту задачу в контроллере:
<?php
namespace AppHttpControllers;
use AppJobsSendNotification;
use AppModelsUser;
class UserController extends Controller
{
public function notifyUser($id)
{
$user = User::find($id);
$message = "Welcome to our application!";
SendNotification::dispatch($user, $message);
echo "Job dispatched successfully";
}
}
?>
Результат выполнения кода при обработке очереди:
"Notification sent to: user@example.com"
"Message: Welcome to our application!"
Пример
Создадим задачу для синхронизации данных с внешним API:
<?php
namespace AppJobs;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
use IlluminateSupportFacadesLog;
class SyncApiData implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
protected $endpoint;
protected $data;
public function __construct($endpoint, $data = [])
{
$this->endpoint = $endpoint;
$this->data = $data;
}
public function handle()
{
// Simulate API sync
$res = "Syncing data to endpoint: " . $this->endpoint;
Log::info($res);
foreach ($this->data as $key => $value) {
echo "Field: " . $key . " => Value: " . $value;
}
}
}
?>
Отправим задачу в очередь для синхронизации:
<?php
namespace AppHttpControllers;
use AppJobsSyncApiData;
class ApiController extends Controller
{
public function sync()
{
$data = ['id' => 1, 'name' => 'article', 'status' => 'active'];
SyncApiData::dispatch('/api/v1/sync', $data);
echo "API sync job dispatched";
}
}
?>
Результат выполнения кода при обработке очереди:
"Field: id => Value: 1"
"Field: name => Value: article"
"Field: status => Value: active"
Смотрите также
-
команда
make-model,
которая создаёт новый класс модели -
команда
make-controller,
которая создаёт новый класс контроллера -
команда
make-command,
которая создаёт новую консольную команду -
команда
queue-work,
которая запускает обработчик очереди