php artisan 队列:工作或聆听不工作 Laravel 5.4

问题描述 投票:0回答:3

我已经安装了 laravel 5.4,想要确认用户注册,通过带有队列的电子邮件,作业表已成功创建,数据也插入到表 user 中,但当我运行 PHP artisan queue: work 命令时,它没有输出任何内容。 我的 Gmail 邮箱里什么也没收到 我花了很多时间来解决它,但仍然不起作用。任何帮助将不胜感激,非常感谢。

工作/发送验证电子邮件类别:

    class SendVerificationEmail implements ShouldQueue
{
  protected $user;

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

    public function handle()
    {
        $data = ['email_token' => $this->user->email_token];

        Mail::send('email.email', $data, function($message) {
            $message->subject('This mail send by Queue Laravel 5.4');
            $message->to($this->user->email);
        });
    }
}

控制器/注册控制器类:

 class RegistrationController extends Controller
{
    public function create()
    {
        return view('register');
    }

    public function register(Request $request)
    {
        //create user
        $user = new User;
        $user->name = $request->name;
        $user->email = $request->email;
        $user->password = bcrypt($request->password);
        $user->email_token = base64_encode($request->email);

        $user->save();
        dispatch(new SendVerificationEmail($user));

        return view('verification');

        //add role by default the new registred saved as a User Role
        $user->roles()->attach(Role::where('name', 'User')->first());

        // redirect
        //return redirect('/posts');

        //login
        auth()->login($user);

    }
    public function verify($token)
    {
        $user = User::where('email_token',$token)->first();
        $user->verified = 1;
        if($user->save())
        {
            return view('emailconfirm',['user'=>$user]);
        }
    }
}
php laravel-5.4
3个回答
1
投票

在 SendVerificationEmail 作业的构造函数中设置连接以及您不想使用的队列,例如,

   public function __construct($user)
   {
        $this->queue = 'default'; //choose a queue name
        $this->connection = 'database';
        $this->user = $user;
   }

然后使用 artisan 命令开始处理这些作业

 artisan queue:work database --queue=default

此外,在您的 SendVerificationEmail 作业中,在文件顶部添加行

public $tries = 3;
,现在,经过此次数的尝试后,该作业将进入失败的作业队列,您可以检查将其放在那里的异常的内容。


0
投票

好吧,如果您在 que:listen 之后没有看到任何内容,并且邮件正在通过普通邮件门面发送 你应该在 .env 中添加以下内容 que_connection=数据库 队列驱动程序=数据库


0
投票

如果你停止监听队列,那么你必须使用 artisan 命令

 php artisan queue:restart

© www.soinside.com 2019 - 2024. All rights reserved.