2016-02-10 2 views
3

Я использую Lumen и хочу знать, как пройти data до моего job класса. У меня есть класс job, как показано ниже;Передача данных на почту Работа/Очередь - Lumen/Laravel

<?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('[email protected]', 'Laravel'); 

      $message->to('[email protected]')->cc('[email protected]'); 
     }); 
    } 
} 

У меня тогда есть функция, которая будет толкать задание в очереди;

public function emailTest() { 

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

    Queue::push(new TestEmailJob); 
} 

Как я могу передать $data и получить его и использовать его в job классе?

ответ

2

Вы можете создать экземпляр переменной, передавая конструктору

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

    protected $data; 


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

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

Теперь от контроллера, вы можете назвать это нравится:

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

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

+0

И я просто передать его как это? 'Queue :: push (новый TestEmailJob ($ data));' –

+1

Вы можете отправить его в очередь с вашего контроллера следующим образом: '$ this-> dispatch (new TestEmailJob ($ data));' –

+0

Спасибо. Обновите свой ответ для других. –