将数据传递到邮件作业/队列 - Lumen/Laravel

moh*_*abk 4 laravel laravel-5 lumen

我正在使用Lumen并想知道如何传递data到我的job班级。我的job课程如下;

<?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');
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public function emailTest () {

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

    Queue::push(new TestEmailJob);
}
Run Code Online (Sandbox Code Playgroud)

我如何传递$data和接收它并在job课堂上使用它?

Jil*_*mas 6

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

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

    protected $data;


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

    public function handle()
    {
        // $this->data;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以从控制器中调用它,如下所示:

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

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