Laravel 現在支持在 Bus facade 的 onQueue
方法中直接使用帶後備值的枚舉,無需手動訪問枚舉的 value
屬性。此改進在處理作業鍊和隊列時,創建更簡潔、更具表達力的代碼。
此增強功能在構建需要根據優先級、資源需求或業務邏輯定向到不同隊列的複雜作業管道時尤其有用。
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, 'Document processing complete') ]) ->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(); } } }
此增強功能簡化了隊列實現,同時保持類型安全並提高了代碼可讀性。
以上是Laravel的清潔器隊列連鎖店的枚舉集成的詳細內容。更多資訊請關注PHP中文網其他相關文章!