Laravel 检查作业是否扩展了某个 class
Laravel check if job extends a certain class
我知道您可以使用 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
的某个抽象基础 class 扩展而来的。通常我会简单地执行 instanceof
检查,但像这样的东西是行不通的:
$job instanceof AbstractTask
有什么方法可以将工作标记为由这些工作事件选择?
编辑
似乎我想要的实际工作(这是我自己的工作 class)可以在 $event->job
中找到,如下所示:
$payload = json_decode($job->getRawBody());
$data = unserialize($payload->data->command);
if ($data instanceof AbstractTask) {
dd($data);
}
我很难相信没有更简单的方法来获取实际正在处理的底层作业,所以我也提出了一个 Github 问题:
顺便说一句,我在你的问题上发帖了。
你能试试这个,看看 resolveName
是否给你正确的 class 名字 job/task:
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) {
...
}
});
我知道您可以使用 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
的某个抽象基础 class 扩展而来的。通常我会简单地执行 instanceof
检查,但像这样的东西是行不通的:
$job instanceof AbstractTask
有什么方法可以将工作标记为由这些工作事件选择?
编辑
似乎我想要的实际工作(这是我自己的工作 class)可以在 $event->job
中找到,如下所示:
$payload = json_decode($job->getRawBody());
$data = unserialize($payload->data->command);
if ($data instanceof AbstractTask) {
dd($data);
}
我很难相信没有更简单的方法来获取实际正在处理的底层作业,所以我也提出了一个 Github 问题:
顺便说一句,我在你的问题上发帖了。
你能试试这个,看看 resolveName
是否给你正确的 class 名字 job/task:
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) {
...
}
});