2017-05-20 13 views
0

キューメールを数日間解決しようとしていましたが、それでも解決策が見つかりません。 の仕事しかし: 、私はPHPの職人のキューを追加した後、私のコントローラ、仕事、メールLaravel 5.3データを送信した後にメールをキューに送信しない

コントローラ

<?php 
namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Contact; 
use App\Jobs\SendEmail; 

class MailController extends Controller 
{ 
public function getContact(){ 
    return view ('mail'); 
} 

public function postContact(Request $request){ 

     $contact = new Contact; 
     $contact->email = $request['email']; 
     $contact->name = $request['name']; 
     $contact->subject = $request['subject']; 
     $contact->save(); 

     dispatch(new SendEmail($contact)); 
     return back(); 
} 
} 

仕事

<?php 
namespace App\Jobs; 
use App\Contact; 
use Illuminate\Bus\Queueable; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use Illuminate\Contracts\Mail\Mailer; 
Use App\Mail\EmailContact; 

class SendEmail implements ShouldQueue 
{ 
use InteractsWithQueue, Queueable, SerializesModels; 

public $contact; 

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

public function handle(Mailer $mailer) 
{ 
    $email = new EmailContact($this->contact); 
    $mailer->to($this->contact->email)->send($email); 
} 
} 

メール

<?php 
namespace App\Mail; 
use App\Contact; 
use Illuminate\Bus\Queueable; 
use Illuminate\Mail\Mailable; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Contracts\Queue\ShouldQueue; 

class EmailContact extends Mailable 
{ 
use Queueable, SerializesModels; 

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

public function build() 
{ 
    return $this->view('emails.contact')->with([ 
     'email' => $this->contact->email, 
     'name' => $this->contact->name, 
     'subject' => $this->contact->subject, 
    ]); 
} 
} 

をご覧ください結果は依然としてSENDの使用と同じです。 私のコーディングに何か問題がありますか?

答えて

0

ご利用可能クラスにShouldQueueを実装してください。

use Illuminate\Contracts\Queue\ShouldQueue; 

class EmailContact extends Mailable implements ShouldQueue 

キュードライバも確認してください。デフォルトでは、laravelはキュードライバをsyncに設定します。つまり、キュージョブはキューに入れようとしても通常のコードと同様に実行されます。最初にキューを実装する必要があります。データベースまたはRedisキューを試してください。

QUEUE_DRIVER=sync

+1

こんにちは、私は最終的にその問題を解決しました。私の.ENVファイルで、私のQUEUE_DRIVER =データベース。最初に私はチェックdd(config( 'queue.default'));出力はまだ同期しています。だから私はPHPの職人の設定でキャッシュをクリア:クリアし、最終的に動作します!私は本当に私のmailableクラスでShouldQueueを実装する必要があります。それを実装することなく、それはまだ動作します。 –

+0

あなたのジョブクラスに 'ShouldQueue'を実装していることに気付きました。それで、あなたは仕事を派遣してメールを直接送るのではなく、仕事をしなければなりません。しかし、あなたはコントローラから直接、そのシナリオでそれを実装する必要があるかもしれないmailableを呼び出すことさえできます。 – Sandeesh

関連する問題