Laravel -如何将变量从控制器传递到作业

iyfamqjs  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(135)

如果这是一个菜鸟问题,请原谅。
我过去常常直接通过控制器发送电子邮件,就像这样:

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));
    }
}
gzszwxb4

gzszwxb41#

很简单,你没有声明$user为类属性,这就是错误的含义。
我建议您将其声明为公共属性,以便在刀片模板中使用

svujldwt

svujldwt2#

是的,兄弟,这不是一个Laravel问题,这是一个PHP类定义问题,你可以通过声明$user属性来解决这个问题,如下所示:

<?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;

    protected $user; // you forgot of put this line

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function handle()
    {
        $user = $this->user;
        Mail::to($user)->send(new RegisterConfirmation($user));
    }
}

相关问题