当我将数据从控制器传递给作业时,Laravel 会出现排队问题 [英] Laravel queues issues when I pass data from controller to jobs

查看:43
本文介绍了当我将数据从控制器传递给作业时,Laravel 会出现排队问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在为Laravel修复队列部分时遇到问题.

I'm having issue fixing the queue part for Laravel.

我有一个非常有效的联系表格.我提交了表单,并且一封包含表单输入详细信息的邮件被发送给我.

I have a contact form which works perfectly. I submit the form and a mail is being sent to me with the input details from the form.

但是问题是,如果您不使用Laravel队列,则由于在发送邮件之前和获得成功消息之后需要等待时间,因此缺少UX.

But the issue is that if you do not use the Laravel Queues then the UX is lacking because of the waiting time before the mail is being sent and after getting the success message.

所以现在我想实现排队部分,但是我做得不好.我还是一个菜鸟……

So now I want to implement the queuing part, but im not doing it right. Im still a noob at it...

这是我的控制器

KontaktformController.php

<?php

namespace App\Http\Controllers;

use App\Jobs\SendEmailJob;
use Carbon\Carbon;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Session;
use App\Kontaktform;
use Illuminate\Http\Request;
use App\Mail\SendEmailMailable;

class KontaktformController extends Controller
{

    public function create()
    {
        return view('kontakt');
    }


    public function store(Request $request) {
        $this->validate($request, [
            'name' => 'required|string',
            'mobile' => 'required',
            'email' => 'required|email',
            'subject' => 'required',
            'message' => 'required',
        ]);
        /*
          Add mail functionality here.*/

        $kontakt = new Kontaktform([
            'navn'  => $request['name'],
            'mobilnr' => $request['mobile'],
            'fastnetnr' => $request['landline'],
            'mail' => $request['email'],
            'emne' => $request['subject'],
            'beskrivelse' => $request['message']
        ]);
        $kontakt->save();

        //$user['email'] = 'test@test.com';

        $job = (new SendEmailJob($request['email']))
            ->delay(Carbon::now()->addSeconds(3));

        dispatch($job);


    }
    }

SendEmailJob.php

<?php

namespace App\Jobs;

use App\Mail\SendEmailMailable;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Mail;

class SendEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $user;

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $email = new SendEmailMailable('test@test.dk');
        Mail::to('admin@admin.dk')->send($email);

    }
}

SendEmailMailable.php

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendEmailMailable extends Mailable
{
    use Queueable, SerializesModels;


    public $request;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($request)
    {
        $this->request = $request;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from('test@test.dk')->view('mail.kontaktform');
    }
}

kontaktform.blad.php

{{$request['email']}}

推荐答案

我发现了问题.我没有将数据从可邮件传递到刀片服务器

I found the issue. I didnt pass data from mailable to my blade

public function build()
    {
        return $this->view( 'mail.kontaktform' )->with( [
            'request' => $this->request,
        ] );
    }

这篇关于当我将数据从控制器传递给作业时,Laravel 会出现排队问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆