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の使用と同じです。 私のコーディングに何か問題がありますか?
こんにちは、私は最終的にその問題を解決しました。私の.ENVファイルで、私のQUEUE_DRIVER =データベース。最初に私はチェックdd(config( 'queue.default'));出力はまだ同期しています。だから私はPHPの職人の設定でキャッシュをクリア:クリアし、最終的に動作します!私は本当に私のmailableクラスでShouldQueueを実装する必要があります。それを実装することなく、それはまだ動作します。 –
あなたのジョブクラスに 'ShouldQueue'を実装していることに気付きました。それで、あなたは仕事を派遣してメールを直接送るのではなく、仕事をしなければなりません。しかし、あなたはコントローラから直接、そのシナリオでそれを実装する必要があるかもしれないmailableを呼び出すことさえできます。 – Sandeesh