You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:53:14