Laravel тепер дозволяє безпосереднє використання бекенд-енумів у методі onQueue фасаду Bus, що усуває необхідність вручну отримувати значення властивості енуму. Це покращення забезпечує чистіший і зрозуміліший код при роботі з ланцюгами завдань та чергами.
Особливо ця можливість корисна при створенні складних пайплайнів завдань, які можуть бути спрямовані в різні черги залежно від пріоритету, ресурсних вимог або бізнес-логіки.
use App\Enums\QueueType;
// Використовуйте енум без ->value
Bus::chain($jobs)
->onQueue(QueueType::Background)
->dispatch();
Ось практичний приклад реалізації системи обробки документів:
<?php
namespace App\Enums;
enum ProcessingQueue: string
{
case Immediate = 'realtime';
case Standard = 'default';
case Batch = 'batch-process';
case LowPriority = 'low-priority';
}
namespace App\Services;
use App\Enums\ProcessingQueue;
use App\Jobs\ProcessDocument;
use App\Jobs\GenerateThumbnail;
use App\Jobs\ExtractMetadata;
use App\Jobs\NotifyUser;
use App\Models\Document;
use Illuminate\Support\Facades\Bus;
class DocumentProcessor
{
public function process(Document $document, bool $isPriority = false)
{
$queue = $isPriority
? ProcessingQueue::Immediate
: ProcessingQueue::Standard;
Bus::chain([
new ProcessDocument($document),
new ExtractMetadata($document),
new GenerateThumbnail($document),
new NotifyUser($document->user, 'Документ оброблено')
])
->onQueue($queue)
->dispatch();
return $document;
}
public function batchProcess(array $documentIds)
{
foreach ($documentIds as $id) {
$document = Document::find($id);
Bus::chain([
new ProcessDocument($document),
new GenerateThumbnail($document)
])
->onQueue(ProcessingQueue::Batch)
->dispatch();
}
}
}
Цей функціонал спрощує реалізацію черг, зберігаючи при цьому типову безпеку та підвищуючи читабельність коду