本小节,介绍一下利用 Laravel 的事件驱动自动发送验证邮件。

        用户注册完成之后会触发一个Illuminate\Auth\Events\Registered事件,我们可以创建这个事件的监听器( Listener )来发送邮件。

        监听器是 Laravel 事件系统的重要组成部分,当一个事件被触发时,对应的监听器就会被执行,可以 很方便地解耦代码。还可以把监听器配置成异步执行,比较适合一些不需要获得返回值并且耗时较长的任务,比如,这里的发送邮件。

    创建监听器监听事件Registered
>$ php artisan make:listener RegisteredListener

将发送邮件的业务逻辑写在监听器的handle方法里。

<?php
namespace App\Listeners;

use App\Notifications\EmailVerificationNotification;
use Illuminate\Auth\Events\Registered;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

// implements ShouldQueue 异步执行监听器
class RegisteredListener implements ShouldQueue
{
/**
* 当事件被触发时,对应该事件的监听器的 handle() 方法就会被调用
*
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle( Registered $event)
{
// 获取刚刚注册的用户
$user = $event->user;
// 调用 notify 发送通知
$user->notify( new EmailVerificationNotification() );
}
}
    注册监听器

在 \App\Providers\EventServiceProvider.php:

<?php

namespace App\Providers;
use App\Listeners\RegisteredListener;
use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
Registered::class => [
RegisteredListener::class,
],
];

/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
parent::boot();

//
}
}

注册完,当对应的事件 Registered 被触发时,就会自动异步执行监听器。

至此,邮箱验证基本上完成了。Laravel 不仅仅是框架,也是一种思想。后面会系统的介绍下事件系统和用户认证等相关内容。

由于能力有限,不足或有不解之处,希望在下方评论区与我讨论,共同提高 。