2016-04-30 6 views
0

私は、キューに手動でアクセスするイベントリスナーを使用してlaravel docsを使用しています。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秒(1回のみ)でリリースするとは思いませんか?

更新: 私が達成しようとしているのは、ユーザー名がuser1の場合、30秒後にウェルカムメールを送信することです。

ありがとうございました。

更新されたコード:

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

あなたは30秒後に電子メール_specifically_を送信するために欠けているのはなぜ? –

+0

はい。しかし 'Mail :: later'の代わりに' $ this-release'を使う@MartinBean – ssuhat

答えて

1

release方法は、機能を終了していないが、それは単に、その後、バックnは秒キューに仕事をプッシュそのハンドラの残りの部分を続行します。代わりにこれを試してみてください:

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

より:
https://laravel.com/docs/5.1/queues

+0

こんにちは、私は私の端末でキューを処理していました。しかし、それは電子メールをリリースしません。 – ssuhat

+0

'attempts'の値をエコーし​​ます。どのように私がドキュメントを読むから、それは0から始まり、試行ごとに1を増やすべきです。 – Josh

+0

'attempts'は1です。function if文の代わりにelse文を入力してください。 – ssuhat

関連する問題