2017-01-27 8 views
2

Я пытаюсь отправить свое действие по электронной почте, используя Laravel database queue Однако этот процесс по-прежнему продолжается в моем браузере, а не работает позади.Laravel 5.3 Queue Работа не работает

это мой контроллер

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); 


     } 
    }); 
} 

это моя модель функция

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"); 
} 

и это моя работа

SendEmails класс реализует ShouldQueue { использование InteractsWithQueue, Queueable, SerializesModels;

/** 
* 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 в свою модель, вы не сможете увидеть время задержки. Кстати, в вашем контроллере функции должны возвращать View для отправки ответа на браузер –

ответ

1

конструктор Вашей работы в не должен вызова методы ручки(); он должен просто установить свойства, необходимые для метода handle. Вы можете вызвать метод дескриптора.

Ваш вызов приложения() -> 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')); 
     }); 
    } 
}