Laravel - 从仓库中调度作业不起作用

5

当我试图从控制器中分派任务时,它可以正常工作。

然而,当我从存储库中执行相同的操作时,会出现错误。

<?php

namespace App\Repositories\Retailer;

use App\Jobs\SlackJob;
use App\Traits\CreateOrderTrait;

class CreateOrderRepo
{
   use CreateOrderTrait;

   public function create($store_id)
     {
        $slackJob = new SlackJob("Test", 1);
        $slackJob = $slackJob->onQueue('high');
        $this->dispatch($slackJob);
     }
}

错误信息:

错误:调用未定义的方法App\Repositories\Retailer\CreateOrderRepo::dispatch()


1
使用辅助函数dispatch()。 - Jignesh Joisar
我猜测在 CreateOrderRepo 中你没有一个 dispatch() 函数,因此在 $this 上下文中使用它是行不通的。 - aynber
1
使用 Illuminate\Foundation\Bus\DispatchesJobs 特性。 - thefallen
2个回答

3

添加特性以调度工作:

use Illuminate\Foundation\Bus\DispatchesJobs;

这与 app('Illuminate\Contracts\Bus\Dispatcher')->dispatch($job); 有何不同?通常我会使用那个。 - abbood
只是更冗长,没有其他区别。通常情况下,您会喜欢执行 dispatch($job)Job::dispatch() 而不是 app('Illuminate\Contracts\Bus\Dispatcher')->dispatch($job) - Paras

1

改变这个

$this->dispatch($slackJob);

到这里

dispatch($slackJob);

包括 trait 也可以起到作用,因为它将分派方法放入您的类中,但我总是更喜欢看到更少的代码,特别是当仍然非常清楚正在发生什么时,这是个人偏好。 - wheelmaker
dispatch($job)Job::dispatch() 相比,哪个更简洁或更清晰?我认为两种方式都可以,只是个人偏好。但我没有看到其中任何一种方式更多代码或不够清晰。 - Paras
如果额外的使用语句不被视为“更多代码”,我不知道该如何帮助你,但感谢您重申我的观点,这是个人偏好。 - wheelmaker
是的,有意义,一个完整的语句!哇,有这么多代码,完全有意义! - Paras
1
很高兴我们能够达成一致,同时感谢您注意到您的个人偏好与我的个人偏好不同,这只是个人喜好问题。我也不太喜欢多余的注释,但我想那也是个人喜好问题。 - wheelmaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接