Laravel:将 class 名称从控制器传递给作业

Laravel: Passing a class name from a Controller to a Job

我正在尝试通过

将某个class名称从控制器传递到作业文件

工作::调度($class姓名);

我试过将它作为字符串传递并作为 ClassName::class 传递,但是这些方法中的 none 有效

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 变量是我要传递的 class名称。 我还需要注意,我从控制器传递了另一个作业的 class 名称,我的意思是作业处理程序应该通过变量调用另一个作业。

我认为您的语法无效,另一种方法是这样做。

dispatch(new $this->jobName($productArray));

在你的工作构造中添加 class 你的变量是 $product 之前的实例的名称,如下所示:

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