Laravel检查工作是否扩展了某个类

时间:2018-08-12 22:32:32

标签: php laravel laravel-5.6 laravel-queue laravel-jobs

我知道您可以使用afterfailingQueue::before(function (JobProcessing $event) { // $event->connectionName // $event->job // $event->job->payload() }); 钩子监听工作事件:

https://laravel.com/docs/5.6/queues#job-events

AbstractTask

我只希望某些工作在这里进行。这些作业是从某个称为instanceof的抽象基类扩展而来的。通常,我只会执行$job instanceof AbstractTask 检查,但这样的操作将不起作用:

$event->job

有什么办法可以标记这些工作事件要接走的工作?

修改

似乎可以在$payload = json_decode($job->getRawBody()); $data = unserialize($payload->data->command); if ($data instanceof AbstractTask) { dd($data); } 中找到我想要的实际Job(这是我自己的Job类),如下所示:

python

我很难相信,没有一种更简单的方法来获取实际正在处理的基础Job,因此我也提出了Github问题:

https://github.com/laravel/framework/issues/25189

1 个答案:

答案 0 :(得分:0)

我在您的问题上贴了。

您可以尝试一下,看看resolveName是否为您提供了您的工作/任务的正确班级名称:

Queue::before(function (JobProcessing $event) {
    $class = $event->job->resolveName();

    // without an instance
    if (is_a($class, AbstractTask::class, true)) {
        ...
    }

    // with an instance
    $instance = app($class);

    if ($instance instanceof AbstractTask) {
        ...
    }
});