【问题标题】:Laravel mailable, data not being passed to Blade when implements ShouldQueueLaravel可邮寄,实现ShouldQueue时数据不会传递给Blade
【发布时间】:2021-11-03 17:30:20
【问题描述】:

我正在尝试使用 ShouldQueue 发送电子邮件,并将数据传递到电子邮件刀片视图,但如果我实施 ShouldQueue 则会失败。

请参阅下面的代码。 下面的代码会执行邮件并将其放入作业队列(数据库驱动程序)中。它有效,我可以在作业表中看到该作业。

然后我运行 php artisan queue:work 在我的计算机上启动 worker。 当工人尝试执行作业时,它会失败。它现在已从作业表中删除,并在 failed_jobs 表中添加了新条目。电子邮件未发送。

在 failed_jobs 表的异常列中,我收到此错误(已删除堆栈跟踪)

Next Facade\Ignition\Exceptions\ViewException:/Users/xxx/xxx/xxx/ 中的未定义变量 $data(查看:/Users/xxx/xxx/xxx/resources/views/mails/ContactForm.blade.php)资源/视图/邮件/ContactForm.blade.php:2

如果我从 ContactFormMail 类中删除“implements ShouldQueue”,则一切正常,并且正在发送电子邮件,但随后电子邮件并未被放入队列中。

我已经尝试过在Laravel docs 中描述的两种方式传递数据,并且我也尝试过重新启动worker。

任何想法我哪里出错了? 如果不清楚,我想将数据传递给 ContactForm.blade.php 并将电子邮件放入队列中。

这是我的代码

控制器:

public function submit()
{
    $this->validate();

    $data = [
        'name' => $this->name,
        'email' => $this->email,
        'message' => $this->message,
    ];

    try {

        Mail::to('xxx@xxx.xx')->send(new ContactFormMail($data) );

        $this->name = "";
        $this->email = "";
        $this->message = "";

        $this->status = "Message sent!";

    } catch (Exception $e) {

        $this->status = "Something went wrong!";

    }

}

ContactFormMail 类:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class ContactFormMail extends Mailable implements ShouldQueue
{

    use Queueable, SerializesModels;

    public $data;

    /**
    * Create a new message instance.
    *
    * @return void
    */
    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
    * Build the message.
    *
    * @return $this
    */
    public function build()
    {
        return $this->view('mails.ContactForm');
    }
}

ContactForm 刀片文件:

<div>
    {{$data['name']}}<br>
    {{$data['email']}}<br>
    {{$data['message']}}<br>
</div>

【问题讨论】:

  • markdown 代替视图 return $this->markdown('mails.ContactForm')->subject('your mail subject');

标签: laravel laravel-8


【解决方案1】:

请尝试重新启动队列工作程序。可能有什么卡住了。重新启动队列后,它“应该”工作。

php artisan queue:restart

【讨论】:

  • 我试过重启worker,重启终端窗口和重启mac。没有任何帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 2016-05-05
  • 2020-07-24
  • 2016-02-05
  • 1970-01-01
  • 2018-09-24
相关资源
最近更新 更多