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;
}
我正在尝试通过
将某个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;
}