2017-01-27 15 views
2

Laravel databaseキュー を使用して電子メールの送信アクションをディスパッチしようとしていますが、この処理は、Laravel 5.3キュージョブが機能していません

これは、これが

public function sendUserEmail() 
{ 
    $delay = Carbon::now()->addMinutes(15); 
    \Log::info("Request Begins"); 
    $user = new SendEmails($this); 
    $user->delay($delay); 
    dispatch($user); 
    \Log::info("Request Ends"); 
} 

私のモデル関数であり、これはShouldQueue { 使用InteractsWithQueue、QUEUEABLE、SerializesModelsを実装

クラスSendEmails仕事である私のコントローラ

protected function importUserExcel(UploadedFile $file, Request $request){ 

    $user_role = Role::where('name','=','user')->first(); 


    \Excel::load($file, function($reader) use ($user_role) { 
     $excel = $reader->select()->get(); 
     foreach($excel[0] as $line){ 
      $user = User::firstOrnew([ 
       'email' => $line['email']]); 
      $user->email = $line['email']; 
      $user->name = $line['name']; 
      $user->password= bcrypt(srand(15)); 

      $user->town = $line['town']; 
      $user->dealer_code = $line['dealer_code']; 
      $user->type = $line['type']; 
      // $user->save(); 
      $user->sendUserEmail(); 
      //$user->attachRole($user_role); 


     } 
    }); 
} 

あります。

/** 
* Create a new job instance. 
* 
* @return void 
*/ 
public function __construct(User $user) 
{ 
    $this->handle($user); 

} 

/** 
* Execute the job. 
* 
* @return void 
*/ 
public function handle(User $user) 
{ 
    $broker = $user->broker; 
    $brokerInstance = \Password::broker($broker); 
    view()->share('locale', app()->getLocale()); 
    $response = $brokerInstance->sendResetLink([ 'email' => $user->email ], function (Message $message) { 
     $message->subject(trans('emails.welcome_subject')); 
    }); 
} 

}

しかし、結果は何も遅延またはキューイングではない最終的に来ているようです。 私のブラウザでは、プロセスを遅らせるのではなく、処理します。

enter image description here

+0

コントローラの機能を十分に投稿できますか? –

+0

ypdated @VũTuấnAnh –

+0

あなたのコードはあなたのログ以外は問題ありません。あなたのログを 'SendEmails'クラスにプッシュしようとします。 Loggerをモデルにプッシュすると、遅延時間が表示されませんでした。ちなみに、あなたのコントローラの関数では、ブラウザに応答を送信するためにビューを返す必要があります –

答えて

1

あなたの仕事のコンストラクタすべきではないコールハンドル()メソッド。ハンドルメソッドに必要なプロパティを設定するだけです。 handleメソッドを呼び出すのはキュー作業者の責任です。

リクエストごとのロケールを設定している場合、app() - > getLocale()の呼び出しが正しくない可能性があります。ジョブは、ミドルウェアまたは関連するhttp要求なしで、別のプロセスから実行されます。

class SendEmails implements ShouldQueue { use InteractsWithQueue, Queueable, SerializesModels; 
    protected $user; 

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

    public function handle() { 
     $user = $this->user; 
     $broker = $user->broker; 
     $brokerInstance = \Password::broker($broker); 

     view()->share('locale', app()->getLocale()); 
     $response = $brokerInstance->sendResetLink([ 'email' => $user->email ], function (Message $message) { 
      $message->subject(trans('emails.welcome_subject')); 
     }); 
    } 
} 
関連する問題