如果这是一个菜鸟问题,请原谅。
我过去常常直接通过控制器发送电子邮件,就像这样:
Mail::to($user)->send(new RegisterConfirmation($user));
如您所见,我还将$user传递到电子邮件中,在电子邮件中可以使用该用户的信息,例如“Hello {{$user-〉username}}!”
但是现在我想对电子邮件进行排队,所以在我的控制器中,现在有了这个:
RegisterConfirmationJob::dispatch($user);
在我的工作中,我有以下几点:
public function __construct(User $user)
{
$this->user = $user;
}
public function handle()
{
$user = $this->user;
Mail::to($user)->send(new RegisterConfirmation($user));
}
当我运行此命令时,它返回以下错误:
[2021-07-09 20:33:57]本地。错误:未定义的属性:应用程序\作业\注册确认作业::$user {“异常”:“[对象](错误异常(代码:0):未定义的属性:/home/vagrant/projects/app/Jobs/注册确认作业。php:37)[堆栈跟踪]
为什么会这样?
编辑:
根据请求,下面是我的整个RegisterConfirmationJob类:
<?php
namespace App\Jobs;
use App\Mail\RegisterConfirmation;
use App\User;
use Illuminate\Support\Facades\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class RegisterConfirmationJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(User $user)
{
$this->user = $user;
}
public function handle()
{
$user = $this->user;
Mail::to($user)->send(new RegisterConfirmation($user));
}
}
2条答案
按热度按时间gzszwxb41#
很简单,你没有声明$user为类属性,这就是错误的含义。
我建议您将其声明为公共属性,以便在刀片模板中使用
svujldwt2#
是的,兄弟,这不是一个Laravel问题,这是一个PHP类定义问题,你可以通过声明
$user
属性来解决这个问题,如下所示: