2016-04-30 42 views
0

我正在使用手動訪問隊列使用事件監聽器的laravel文檔。Laravel事件監聽器和手動版本

這裏是我的代碼:

$user = $event->user; 

    if ($user->first_name == 'User1') { 
     $this->release(30); 
    } 

    $this->mailer->send('emails.user.welcome', ['user' => $user], function ($m) use ($user) { 
     $m->subject('Thank you for registering at ' . env('APP_NAME'))->to($user->email); 
    }); 

的問題是將電子郵件發送給前30秒和後30秒再次發送。我有理解它的問題。

是不是假設在30秒內釋放(只有一次)?

更新: 我想嘗試實現的是,如果用戶名是user1,請在30secs之後發送歡迎郵件。

謝謝。

更新的代碼:

if ($user->first_name == 'Stefen' && $this->attempts() === 0){ 
     var_dump('this will send later'); 
     $this->release(10); 
    } else{ 
     $this->mailer->send('emails.user.welcome', ['user' => $user], function ($m) use ($user) { 
      $m->subject('Thank you for registering at ' . env('APP_NAME'))->to($user->email); 
     }); 
    } 
+0

爲什麼你想發送電子郵件_specifically_ 30秒後? –

+0

是的。但使用'$ this-release'而不是'Mail :: later' @MartinBean – ssuhat

回答

1

release方法不會終止功能,它只是推動工作回到ň秒到隊列中,則與該處理器的其餘部分繼續。試試這個:

if ($user->first_name == 'User1' && $this->attempts() === 1) 
    { 
     $this->release(30); 
    } 
    else 
    { 
     // Mail time. 
    } 

更多關於隊列:
https://laravel.com/docs/5.1/queues

+0

嗨,我在我的終端看到它處理隊列。但它不會發布電子郵件。 – ssuhat

+0

迴應'企圖'的值。從我如何閱讀文檔,應該從0開始,每次嘗試增加1次。 – Josh

+0

'企圖'是1.功能輸入到其他人而不是如果語句 – ssuhat