如何使用队列将数据传递到邮件视图?

时间:2019-02-18 09:07:57

标签: php laravel laravel-5

我有我的工作类别ProductPublish方法handle(),我正在尝试发送电子邮件。

public function handle()
{
   //
    Mail::to('i******o@gmail.com')->send(new SendEmail());
}

ProductController控制器中,我像下面这样调用该作业类

ProductPublish::dispatch();

在可发送的SendEmail类中,我试图像下面这样传递数据以查看

public $message;
public function __construct($message)
{
    $this->message = 'This is test message';
}
public function build()
{
    return $this->view('email.product.product-publish')->with('message' => $this->message); 
} 

但是它不起作用。我也尝试了不附加任何with()方法,但仍能得到结果。在电子邮件视图中,我正在像下面一样

调用数据
{{ $message }}

有人可以指导我什么可能是它不起作用的问题。另外,我实际上想从ProductController传递数据,但是由于我无法从sendEmail传递数据,因此我还没有从控制器尝试过。

请指导我如何解决它。

2 个答案:

答案 0 :(得分:2)

在laravel中,

The arguments passed to the dispatch method will be given to the job's constructor

因此,当您调用调度时,可以传递消息:

ProductPublish::dispatch($message);

然后在您的工作中,可以添加属性message和构造函数,以从调度中获取并分配它:

private $message;

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

public function handle()
{
   // Use the message using $this->messge
    Mail::to('i******o@gmail.com')->send(new SendEmail($this->message));
}

您还可以直接将电子邮件排队。选中documentation

答案 1 :(得分:0)

尝试一下:

public $message;

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

public function build()
{
    // Array for passing template
    $input = array(
                      'message'     => $this->message
                  );

    return $this->view('email.product.product-publish')
                ->with([
                    'inputs' => $input,
                  ]);
}

选中Docs