• laravel 事件系统


     例子:

    打开 VerificationController ,此控制器处理所有邮件认证相关逻辑:

    app/Http/Controllers/Auth/VerificationController.php

    源码解析:

    构建函数里使用了三个中间件,并且使用了中间件简称,这些简称是在 app/Http/Kernel.php 中的 $routeMiddleware 属性里做了定义,以下是三个中间件调用的解释:

    设定了所有的控制器动作都需要登录后才能访问。

    设定了 只有 verify 动作使用 signed 中间件进行认证, signed 中间件是一种由框架提供的很方便的 URL 签名认证方式,此中间件的更多说明请见 Laravel 5.6 新功能 —— 路由签名 。

    对 verify 和 resend 动作做了频率限制,throttle 中间件是框架提供的访问频率限制功能,throttle 中间件会接收两个参数,这两个参数决定了在给定的分钟数内可以进行的最大请求数。 在这个例子中,我们限定了这两个动作访问频率是 1 分钟内不能超过 6 次。

    控制器中:

    use VerifiesEmails;

    在 Laravel 的注册登录系统里面,一般都使用 PHP 的 Trait 机制来将提前设定好的功能注入到控制器里。在此控制器中,我们可以看到使用了 VerifiesEmails Trait ,打开此文件查看源码:

    vendor/laravel/framework/src/Illuminate/Foundation/Auth/VerifiesEmails.php

    请注意看 verify 方法里这一段:

    如果用户能够成功设置为已认证的话,触发事件 Verified 并将用户传参。这里使用了 Laravel 的事件系统。

    Laravel 事件是一套简单的观察者实现,能够订阅和监听应用中发生的各种事件。事件系统为应用各个方面的解耦提供了非常棒的解决方案,因为单个事件可以拥有多个互不依赖的监听器。

    在我们这个场景中,用户认证成功后触发了 Verified 事件,我们对其进行监听即可加入我们想要的逻辑。此时也许有同学要问,为何不直接修改 vendor/laravel/framework/src/Illuminate/Foundation/Auth/VerifiesEmails.php 文件即可?因为此文件是 Laravel 框架自带的,本地修改后,无法纳入版本控制系统里,也无法同步到线上或者其他环境。所以正确的方式,是对 Verified 事件进行监听。

    应用的事件监听需要在 EventServiceProvider 里注册:

    app/Providers/EventServiceProvider.php

    这种键值对应的写法,可以让单个事件对应多个监听器,这里我们的事件是 IlluminateAuthEventsVerified ,监听器是 AppListenersEmailVerified 。Listeners 文件夹是约定俗成的监听器命名,接下来我们使用命令行来生成此监听器:

    php artisan event:generate

    以上命令会为我们生成 app/Listeners/EmailVerified.php 文件,稍作修改:

    事件监听器已经部署好,接下来我们测试一下

    用户点击认证链接进入网站,如果认证成功,即可看到提示





  • 相关阅读:
    informix数据库的日志
    javaScript之BOM操作2
    javaScript之BOM操作1
    开发必会系列:hibernate事务
    性能测试系列:Oracle数据库awr报告使用与分析
    《股票大作手回忆录》读书笔记
    金融知识学习综合笔记
    开发必会系列:《深入理解JVM(第二版)》读书笔记
    基础教材系列:计算机底层知识点积累
    基础教材系列:数据结构与算法——慕课网笔记
  • 原文地址:https://www.cnblogs.com/sgm4231/p/11017955.html
Copyright © 2020-2023  润新知