Laravel проверить, если работа распространяется на определенный класс

Я знаю, что вы можете прослушивать мероприятия, используя before, after а также failing крючки:

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

Queue::before(function (JobProcessing $event) {
// $event->connectionName
// $event->job
// $event->job->payload()
});

Я только хочу, чтобы здесь были подобраны определенные работы. Эти задания выполняются из определенного абстрактного базового класса, называемого AbstractTask, Обычно я просто выполняю instanceof проверьте, но что-то вроде этого не будет работать:

$job instanceof AbstractTask

Можно ли как-то пометить работу, которая будет подхвачена этими событиями работы?

редактировать

Кажется, что настоящая работа, которую я хочу (это мой собственный класс работы), может быть найдена в $event->job вот так:

$payload = json_decode($job->getRawBody());
$data = unserialize($payload->data->command);

if ($data instanceof AbstractTask) {
dd($data);
}

Мне трудно поверить, что нет более простого способа получить базовый Job, который на самом деле обрабатывается, поэтому я также сделал проблему с Github:

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

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) {
...
}
});
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]