zoukankan      html  css  js  c++  java
  • 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 文件,稍作修改:

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

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





  • 相关阅读:
    BZOJ 3744 Gty的妹子序列
    BZOJ 3872 Ant colony
    BZOJ 1087 互不侵犯
    BZOJ 1070 修车
    BZOJ 2654 tree
    BZOJ 3243 向量内积
    1003 NOIP 模拟赛Day2 城市建设
    CF865D Buy Low Sell High
    CF444A DZY Loves Physics
    Luogu 4310 绝世好题
  • 原文地址:https://www.cnblogs.com/sgm4231/p/11017955.html
Copyright © 2011-2022 走看看