Laravel 7-如何将数据(变量)从控制器传递到作业,再传递到邮件以查看?

Laravel 7-如何将数据(变量)从控制器传递到作业,再传递到邮件以查看?,laravel,queue,jobs,Laravel,Queue,Jobs,我已经见过好几次有人问这个问题,但没有人真正回答,或者他们的方法不起作用。我将粘贴到目前为止我所拥有的内容,但是我仍然得到一个错误,即找不到变量。作业队列工作正常,但在视图中找不到变量。代码下面是我看到的其他不起作用的资源 错误消息-ErrorException:未定义变量:newneeded in/Users/JandB/Desktop/myProject/storage/framework/views/dab250ddee8692f8f6a1fa334aad4ba0eb81350.php:1

我已经见过好几次有人问这个问题,但没有人真正回答,或者他们的方法不起作用。我将粘贴到目前为止我所拥有的内容,但是我仍然得到一个错误,即找不到变量。作业队列工作正常,但在视图中找不到变量。代码下面是我看到的其他不起作用的资源

错误消息-ErrorException:未定义变量:newneeded in/Users/JandB/Desktop/myProject/storage/framework/views/dab250ddee8692f8f6a1fa334aad4ba0eb81350.php:1

控制器

public function store(StoreNeedRequest $request)
{
    $users = User::where('team_id', '=', auth()->user()->team_id)->get();

    $newNeed = 4;

    foreach ($users as $user) { 
        SendNeedsEmailJob::dispatch($newNeed, $user);

        }

}
工作

邮寄

看法

其他资源


确保已删除所有以前的作业,并清除了所有缓存,以便在未定义
$newneeded
变量的情况下,不会运行较旧版本的
NeedsMail

是否收到任何错误?邮件视图中输出了什么?什么是laravel版本?确保队列正在运行也是一个好主意,我发现这有时是issue@IGP-邮件视图中未输出任何内容。我编辑并添加了错误消息,我正在使用Laravel 7。如果这确实是问题所在,则可能需要报告,因为with方法会首先检查它是否为数组,如果不是,则将其用作param 1键和param 2值。因此,代码“应该”在我所看到的范围内起作用。从docs示例来看,我不确定
with
方法在与
markdown
方法一起使用时是否起作用,但看看
Mailable
类,它应该起作用。我看不出还有什么问题。也许OP应该确保没有缓存任何内容,并且队列工作程序已经重新启动。可能是8中的laravel版本。它是这样的,但我没有检查以前的版本。我已经清除了缓存,重新启动了工作程序,但这仍然不起作用。嘿,Jeffery,我刚刚用全新的Laravel 7安装在本地尝试了您的代码,但我无法重现错误,因此您编写的代码似乎没有问题。您应该确保删除了以前的任何作业,因为我只能认为它们可能是使用较旧版本的
NeedsMail
序列化的,而没有定义
$newneeded
变量。
class SendNeedsEmailJob  implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $newNeed;
    protected $user;
    
 
    public function __construct($newNeed, $user)
    {
        $this->newNeed = $newNeed;
        $this->user = $user; 
    }

   
    public function handle()
    {
     
    Mail::to($this->user->email)
      ->send(new NeedsMail($this->newNeed));
        
            
    }
}
class NeedsMail extends Mailable
{
    use Queueable, SerializesModels;
    public $newNeed;
   
 
    public function __construct($newNeed)
    {
        $this->newNeed = $newNeed;
        
    } 

   
    public function build()
    {
     
        return $this->markdown('emails.needs')->with('newNeed', $this->newNeed)->subject('New NEED');
    }
}
{{$newNeed}}