美文网首页
Laravel6.X的事件和监听系统(Events and Li

Laravel6.X的事件和监听系统(Events and Li

作者: 前端组件库 | 来源:发表于2019-12-20 13:36 被阅读0次

我们先来了解下事件和监听,事件就是我们要做某一个动作,例如,发送邮件,发送短信,站内信等等,但我们想把这些剥离出来,放在一个类里面,然后把各项的动作放在另一个单独的文件里面。这些单独的文件可以称做监听。

我们在此举一个例子。当新客户注册的时候,我们需要发给他一个欢迎邮件,然后把他纳入到我们的邮件订阅列表里,然后在给管理员发送一个新用户注册成功的消息。

我们把这三个动作放到一个事件里面。我们可以直接写在控制器里面,当然也可以做成一个事件类。为了节省事件,我们直接用一行代码代替一个监听事件。

dump("sent an email to the customer");
dump("let the customer subscribe");
dump("send notification to the admin");

我们把这三个动作做成一个事件,执行命令:

php artisan make:event NewUserRegisteredEvent

这样就会在app/Events/文件夹下面产生一个NewUserRegisteredEvent.php的文件。里面有一个构造函数和broadcastOn的方法。如果我们要传参,可以在构造函数里面传参,例如:

public $user;

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

把属性设置为public是因为要引入到监听事件里面。这时候我们可以在控制器里把这个类引进去来代替之前的三个动作:

event(new NewUserRegisteredEvent($user));

接下来我们做个监听事件:

php artisan make:listener WelcomeNewCustomer

我们会发先多了一个app\listeners文件夹,多了一个文件就是WelcomeNewCustomer.php,我们打开文件,发现里面有个构造方法和handle方法。我们在handle方法里面写我们具体的业务逻辑:

dump("sent an email to the customer");

把这一行代码放进去,为了方便,我没有写具体的发邮件的代码,请看官自行编纂。然后同理,我们可以创建其他的监听事件放进去,不过我们先不做,我会给你们另外一个做法。这里还有一个补充点就是handle函数有一个event的变量,我们其实可以从这个变量里拿到我们想要的user这个变量。$event->user,这样写便可。

这时候我们打开app\providers\eventserviceprovider.php便可以进行对event和listeners的对照。

protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
    ];

这里连接event和listener的节点,我们来把我们刚才做的event和listener在这里做一个连接。

protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        NewUserRegisteredEvent::class => [
              \App\Listeners\SendWelcomeEmail::class,
              \App\Listeners\AddToSubscriber::class,
            \App\Listeners\SendAdminNotice::class
         ]
    ];

你发现我们还没有产生的listener类现在都已经放在里面了,我们如何产生呢?很简单就用一个

php artisan event:generate

这样我们会发现在EventServiceProvider.php里面定义的都会在app\listeners文件夹下出现了。虽后我们把剩下的两个动作放在相应的listener文件里。

相关文章

网友评论

      本文标题:Laravel6.X的事件和监听系统(Events and Li

      本文链接:https://www.haomeiwen.com/subject/dpmbnctx.html