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中文网其他相关文章!