0

我正在尝试将某个类名从控制器传递到作业文件

工作::dispatch($className);

我尝试将其作为字符串传递并将其作为 ClassName::class 传递,但这些方法都不起作用

Job 文件中的代码如下所示:

<?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 BreakUpArraysJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $products;
    protected $jobName;

    public function __construct($products, $jobName)
    {
        $this->products = $products;
        $this->jobName = $jobName;
    }

    /**
     * Execute the jobName.
     *
     * @return void
     */
    public function handle()
    {
        $productArrays = array_chunk($this->products, 5000);

        foreach($productArrays as $productArray){
            $this->jobName::dispatch($productArray);
        }
    }
}

$jobname 变量是我要传递的类名。我还需要注意,我从控制器传递了不同作业的类名,我的意思是作业处理程序应该通过变量调用另一个作业。

4

2 回答 2

0

在您的工作构造中添加您的 var 是 $product 之前的实例的类名称,如下所示:

 public function __construct(Product $products, $jobName)
    {
        $this->products = $products;
        $this->jobName = $jobName;
    }
于 2020-07-15T14:33:37.350 回答
0

我认为您的语法不起作用,另一种方法是这样做。

dispatch(new $this->jobName($productArray));
于 2020-07-15T13:38:48.147 回答