将数据传递到邮件 Job/Queue - Lumen/Laravel

Pass data to Mail Job/Queue - Lumen/Laravel

我正在使用 Lumen,想知道如何将 data 传递给我的 job class。 我的 job class 如下所示;

<?php

namespace App\Jobs;

use App;
use Illuminate\Contracts\Mail\Mailer;

class TestEmailJob extends Job
{
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //

    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle(Mailer $mailer)
    {
        //
        $data; // I want to pass this from my function
        $mailer->queue('emails.emailtemplate', $data , function ($message) {
            $message->from('support@xxx.com', 'Laravel');

            $message->to('xxx@gmail.com')->cc('xxx@yahoo.co.uk');
        });
    }
}

然后我有一个函数可以将作业推送到队列中;

public function emailTest () {

    $data = ['user' => $user];

    Queue::push(new TestEmailJob);
}

如何传递 $data 并接收它并在 job class 中使用它?

您可以通过传递给构造函数来实例化变量

class TestEmailJob extends Job implements SelfHandling, ShouldQueue
{
    use InteractsWithQueue;

    protected $data;


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

    public function handle()
    {
        // $this->data;
    }
}

现在在 Controller 中,您可以这样调用它:

$this->dispatch(new TestEmailJob($data));

http://laravel.com/docs/5.1/queues#writing-job-classes