Laravel Horizon中如何让任务的Data区域显示自定义数据?
在Laravel Horizon任务的Data区域显示自定义数据
要在Horizon的任务详情Data区域展示自定义数据,有两种直接的实现方式:
方式一:定义公共属性
在你的任务类里,把需要追踪的自定义数据设为公共类属性,Horizon会自动序列化这些属性并展示在Data区域。示例代码如下:
<?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; class CustomProcessJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; // 定义公共属性存储自定义数据 public $orderId; public $operator; /** * 创建任务实例 */ public function __construct(int $orderId, string $operator) { $this->orderId = $orderId; $this->operator = $operator; } /** * 执行任务 */ public function handle() { // 任务业务逻辑 } }
当你分发这个任务后,orderId和operator就会自动出现在Horizon的Data区域中。
方式二:重写getJobData方法(定制化展示)
如果需要对展示的数据做筛选、格式化,或者不想暴露全部公共属性,可以重写任务类的getJobData方法,返回你指定的关联数组:
public function getJobData(): array { return [ '订单ID' => $this->orderId, '操作人' => $this->operator, '任务类型' => '订单状态同步', '创建时间' => now()->toDateTimeString() ]; }
这种方式下,Horizon的Data区域只会显示你在方法里返回的字段,适合需要精细化展示的场景。
注意:确保要展示的数据可以正常序列化,比如避免包含无法序列化的对象;如果需要传递Eloquent模型,使用SerializesModels trait即可,它会自动序列化模型主键,任务执行时再重新查询完整模型。
内容的提问来源于stack exchange,提问作者Magmatic
相关产品推荐
相关产品推荐

