我之前读过这个问题的解决方案,但似乎我做错了其他事情,这就是我问的原因:通常解决方案是将参数添加到类的主体以及 __construct 方法中,但甚至这样做是行不通的。
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Mail;
use App\Mail\TasksFinished;
class SendMailFinished implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public $tries = 3;
protected $msg;
protected $subj;
protected $mailto;
public function __construct($msg, $subj, $mailto)
{
//
$this->msg = $msg;
$this->subj = $subj;
$this->mailto = $mailto;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Envia correo cuando termine cola.
Mail::to($this->mailto)->queue(new TasksFinished($this->msg, $this->subj));
}
我尝试在修补程序中以这种方式通过队列运行它:
use App\Jobs\SendMailFinished;
$job = new SendMailFinished('Hola', 'Prueba', '[email protected]');
$job->dispatch();
TypeError:函数参数太少 App/Jobs/SendMailFinished::__construct(), 0 传入 C:/larragon/www/reportes/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php 在第 16 行,正好是预期的第 3 行
为什么即使在类中和实例化期间指定了所有参数后,在分派时仍然看不到任何参数。 (我也尝试过公开参数,但这是同一件事)。
当您调用
dispatch()
时,您应该将参数发送到那里。
尝试静态调用它
SendMailFinished::dispatch('Hola', 'Prueba', '[email protected]');
在 Laravel 中,有两种方法可以将参数传递给调度作业。 首先是根据 Job 类的要求简单地调用
dispatch
或 dispatchNow
,就像调用类上的静态方法一样:
YourJob::dispatch(argument1, argument2, argument3);
第二个是在创建 Job 类的实例/对象时简单地传递参数,然后将对象传递给调度方法(始终在控制器中可用),例如:
$this->dispatch(new YourJob(argument1, argument2, argument3));
参数将在构造函数中可用,您可以将它们分配给类局部变量属性并在 Job 类中的任何位置使用。
这与你的情况无关,但在我的情况下,我错过了我的工作课程中的
implements ShouldQueue
,如果它可能对任何人有帮助的话