【问题标题】:Laravel: Passing a class name from a Controller to a JobLaravel:将类名从控制器传递给作业
【发布时间】:2020-07-15 13:19:49
【问题描述】:

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

工作::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 变量是我要传递的类名。 我还需要注意,我从 Controller 传递了不同 Job 的类名,我的意思是作业处理程序应该通过变量调用另一个 Job。

【问题讨论】:

  • 试试{$this-&gt;jobName::dispatch}($productArray)

标签: laravel laravel-controller laravel-jobs


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      相关资源
      最近更新 更多