首页 > 其他分享 >laravel 框架中的 事件 监听 和订阅

laravel 框架中的 事件 监听 和订阅

时间:2023-05-29 11:00:27浏览次数:114  
标签:laravel 订阅 UserRegistered App event 事件 监听器 监听

真实举例 老规矩

  • 假设我们需要在用户注册成功后发送一封欢迎邮件给用户
  • 首先 定义事件 App\Events\UserRegistered 、 App\Events\UserLogin
  • 然后定义一个监听器 App\Listeners\SendWelcomeEmail
  • 然后添加一个订阅者 App\Listeners\UserEventSubscriber

简化版本

Event::listen('App\Events\UserRegistered', function ($event) {
    $user = $event->user;
    // 发送欢迎邮件给用户
},function ($event) {
    $user = $event->user;
    // 记录日志
});

三者逻辑关系

  • 监听器监听事件 类似观察者模式 观察者就是监听器 事件就是被观察者
  • 订阅者 : 由于以上事件和监听器,如果想处理对应多个事件 就是用订阅者 观察者就办不到了
  • 事件发布流程:
  • UserRegistered 事件和 SendWelcomeEmail 监听器关联起来
  • 当UserRegistered 事件被触发时,SendWelcomeEmail 监听器的 handle() 方法会被自动调用,以实现发送欢迎邮件的功能
  • 事件订阅流程:
  • 订阅器类 UserEventSubscriber分别将 onUserRegistered 和 onUserLoggedIn 方法注册到事件监听器中
  • 当 UserRegistered 事件和 \UserLogin 事件被触发时,UserEventSubscriber 订阅器中相应的方法会被自动调用,以实现记录用户注册和登录日志的功能

代码

public function boot()
{
    parent::boot();

    $this->app->bind('App\Contracts\UserRegisteredleInterface', 'App\Events\UserRegisteredImplementation');

    $this->listen = [
        'App\Events\UserRegistered' => [
        'App\Listeners\SendWelcomeEmail',
    	],
    ];

    $this->subscribe = [
       'App\Listeners\UserEventSubscriber@onUserRegistered',
       'App\Listeners\UserEventSubscriber@onUserLoggedIn'
    ];
}

bind event

  • 作用: 用于绑定一个事件到到一个处理器函数
  • 效果: 事件被触发后处理函数会被调用

listen event

  • 作用: 注册一个监听器
  • 效果: 事件被触发后监听器会执行相应的操作

subscribe event

  • 作用: 注册一个监听器一个事件订阅者 和观察者不同 可以订阅多个事件
  • 效果: 事件被触发后监听器通知订阅者

标签:laravel,订阅,UserRegistered,App,event,事件,监听器,监听
From: https://www.cnblogs.com/guanchaoguo/p/17439844.html

相关文章

  • 关于动态渲染的组件watch监听不到传入的props的问题
    watch:{propsTime:{handler(newValue,oldValue){console.log('props',newValue)this.getOverviewData()},//这里增加了一个immediate属性,说明监听到props传参后立即先去执行handler方法immediate:true,}......
  • laravel box/spout 处理excel大数据
    1、简介laravel导入导出常规使用maatwebsite/excel,在处理大数据时效率低、占用过多内存。而box/spout效率高、占用内存少,更适合处理大数据的导入导出。2、安装composerrequirebox/spout"box/spout":"^3.1"3、封装<?phpnamespaceApp\Services\Common;useBox\Spo......
  • Java:SpringBoot整合Canal+RabbitMQ组合实现MySQL数据监听
    canal[kə’næl],译意为水道/管道/沟渠,主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费目录一、MySQL设置二、启动Canal服务端三、通过Canal客户端消费数据四、通过RabbitMQ消费数据1、启动RabbitMQ2、修改canal配置3、消费RabbitMQ中的数据文档资料github:https......
  • 解决laravel环境在Ubuntu下使用php artisan 创建文件后无法在phpstorm中编辑的问题
    一、打开ubuntu运行sudovi/etc/profile.在末尾添加 umask000exportumask摁esc后保存:wq退出重启电脑即可二、或者直接在ubuntu下运行umask000这样创建文件后文件权限直接是777 三、以上两者区别1.第一点防止重启电脑后将umask重置掉2.第二点如果执行此命令的......
  • Canal 安装 && 使用,监听Mysql数据库
    1.下载canal.deployer-1.1.5.tar.gz2.查看数据库是否开启binlog模式(必须)showvariableslike'log_%';log_bin属性值为ON,则binlog模式开启;为OFF则binlog模式关闭。若binlog模式关闭,则在MySQL配置文件my.cnf(my.ini)设置如下信息:[mysqld]log-bin=mysql-bin#开启binlogbi......
  • Listener(监听器)
    概念:监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。作用:监听javaweb的三个对象,ServletContext,ServletRequest,HttpSession编写步骤1.编写一个类实现监听器接口重......
  • 监听文件夹下的文件变化, 并且传输到S3 (2)
     直接使用docker发布################whenfilecreatedtransferittoS3anddeleteit#########################3sudodockerrun-itd--privileged--restart=always--namefile_transfer_s3\-e'LISTENER_DIR=/opt/listener/'\-e'LISTE......
  • day107-过滤器与监听器
    过滤器filter:过滤器用来过滤网站的数据处理中文乱码登陆验证......导入maven包<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0&......
  • FLEX实践—模拟Application与Module间的事件监听
         一直找到如何在Application中发出一个事件,让Module捕获该事件并做出相应的动作。但是一直没找到,于是模拟了一个这样的情景。 WatchTest.mxml<?xmlversion="1.0"encoding="utf-8"?><mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"......
  • Qt系统学习系列目录:订阅必看
    文章目录前言:必看文章目录一.按钮类1.1QAbstractButton(已写)1.2QPushButton(已写)1.2QToolButton(已写)1.3RadioButton1.4CheckBox1.5CommandLinkButton1.6ButtonBox二.单元视图2.1ListView2.2TreeView2.3TableView2.4ColummView三.单元组件3.1ListWidget3.2TreeWidget3......