【问题标题】:Laravel 7- How to pass data(variable) from CONTROLLER to JOB to MAIL to VIEW?Laravel 7-如何将数据(变量)从控制器传递到作业到邮件到查看?
【发布时间】:2021-05-02 17:53:22
【问题描述】:

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

错误消息-ErrorException:未定义变量:/Users/JandB/Desktop/myProject/storage/framework/views/dab250ddee8692f8f6a1fa3334aad4ba0eb81350.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);

        }

}

工作

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}}

其他资源

https://laracasts.com/discuss/channels/laravel/laravel-job-not-passing-variable-to-end-viewhttps://medium.com/@petehouston/passing-data-to-blade-template-from-queue-in-laravel-79130c598f01Laravel queues issues when I pass data from controller to jobs

【问题讨论】:

  • 你有什么错误吗?邮件视图中输出了什么?
  • laravel 版本是什么?
  • 确保您的队列正在运行可能也是一个想法,我发现这有时是问题
  • @IGP - 邮件视图中不输出任何内容。我编辑并添加了错误消息,我正在使用 Laravel 7

标签: laravel queue jobs


【解决方案1】:

确保您已删除所有以前的作业,并清除所有缓存,这样您就不会在未定义 $newNeed 变量的情况下运行旧版本的 NeedsMail。

【讨论】:

  • 如果这确实是问题,它可能需要报告,因为 with 方法会首先检查它是否是一个数组,如果不是,它将使用它作为参数 1 键和参数 2价值。所以代码“应该”在我所看到的范围内工作。
  • 从文档示例开始,我不确定 with 方法在与 markdown 方法一起使用时是否有效,但看看 Mailable 类,它应该。我看不出还有什么不妥。也许 OP 应该确保没有任何内容被缓存并且队列工作人员已经重新启动。
  • 可能是laravel 8中的版本是这样的,但是之前的版本我没查过
  • 我清除了缓存,重启了worker,还是不行。
  • 嘿 Jeffery,我刚刚在本地安装了新的 Laravel 7 并尝试了您的代码,但我无法重现该错误,因此您编写的代码似乎没有问题。你应该确保你已经删除了任何以前的作业,因为我只能认为它们可能已经用旧版本 NeedsMail 序列化,而没有定义 $newNeed 变量。
猜你喜欢
  • 1970-01-01
  • 2021-09-20
  • 2019-07-18
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多