如何解决Laravel Queue未将变量发送到刀片文件
我正在尝试使用mailables和Laravel Queue发送大量电子邮件。我将主题和消息作为变量传递。当我不使用队列时,没有任何问题可以完美地发送电子邮件,但是在关闭http连接(即关闭浏览器)时,此操作会中断。
使用队列时出现问题,该变量未传递到刀片模板。
控制器
public function newsletter(Request $request)
{
$job = (new SendNewsLetter($request->all()))->delay(Carbon::now()->addSeconds(5));
dispatch($job);
Session::flash('message','Email Sent');
Session::flash('class','success');
return redirect()->route('news');
}
工作
public $tries = 1;
public $request;
public function __construct($request)
{
//
$this->request = $request;
$request = $this->request;
}
public function handle(Request $request)
{
$data = array(
'message' => $request->message,'subject' => $request->subject,'file' => $request->file("file")
);
//dd($data);
$teachingLevel = $request->highest_teaching_level;
$school = $request->school;
$province = $request->province;
$district = $request->district;
$subject = $request->subject;
if ($teachingLevel != "" && $school != "" && $province != "" && $district != "") {
$email = User::where('highest_teaching_level',$teachingLevel)->where('current_school_name',$school)->where('address','LIKE','%'.$province.'%')->where('address','%'.$district.'%')->pluck('email');
}else{
$email = User::pluck('email');
}
foreach($email as $e)
{
Mail::to($e)->send(new NewsLetter($data,$subject));
}
}
邮件
public $data;
public $subject;
public function __construct($data,$subject)
{
//
$this->subject = $subject;
$this->data = $data;
}
public function build()
{
$name = 'test';
//dd($name);
if ($this->data['file'] != "") {
# code...
return $this->subject($this->subject)->markdown('mail.newsletter')->with('data',$this->data)->attach($this->data['file']->getRealPath(),[
'as' => $this->data['file']->getClientOriginalName()
]);
}else{
//dd($this->subject);
return $this->subject($name)->markdown('mail.newsletter')->with('data',$this->data);
}
}
我查看了这样的多个答案-> here
但是不起作用,变量没有传递到刀片模板是因为变量存储方式存在问题。
我的替代方案是先将消息存储在DB中,然后从那里检索数据
解决方法
请使您的__construct
函数和handle
函数如下所示。
public function __construct($request)
{
//
$this->request = $request;
}
public function handle()
{
$request = $this->request;
//to see what you're getting \Log::info([$request]);
//rest of the logic.
}
,
首先,在使用类的属性时应使用“ this”。
public function __construct($request)
{
//
$this->request = $request;
$request = $this->request; REMOVE IT
}
///
$data = array(
'message' => $this->request->message,'subject' => $this->request->subject,'file' => $this->request->file("file")
);
第二,添加更改后,您很有可能忘记执行命令。
php artisan queue:restart
请参阅https://laravel.com/docs/8.x/queues#queue-workers-and-deployment
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。