Laravel事件监听器用法实例分析


Posted in PHP onMarch 12, 2019

本文实例讲述了Laravel事件监听器用法。分享给大家供大家参考,具体如下:

这里讲述最佳实践方案,分以下步骤:

第一步:注册事件和监听器。

在EventServiceProvider的linsten数组里面加上事件和监听器,键名是事件,键值里面的数组是一个或者多个监听器,意思是当某一个事件发生的时候,传送给数组里面的那些个监听器,执行一些列操作。

这里,我监听发送短信验证码事件,一旦有发送验证码动作,我就要到验证码发送记录表里面添加一条数据,用以记录。

D:\phpStudy\WWW\BCCKidV1.0\app\Providers\EventServiceProvider.php

protected $listen = [
  'App\Events\Event' => [
    'App\Listeners\EventListener',
  ],
  'App\Events\SendPhoneCodeEvent' => [
    'App\Listeners\SendPhoneCodeListener',
  ],
];

第二步:生成监听和事件文件。

php artisan event:generate

就会自动生成如下两个文件:

D:\phpStudy\WWW\BCCKidV1.0\app\Events\SendPhoneCodeEvent.php
D:\phpStudy\WWW\BCCKidV1.0\app\Listeners\SendPhoneCodeListener.php

第三步:打开App\Events\SendPhoneCodeEvent,

加上一个属性,这个属性是一个数组,里面会有验证码内容,接收验证码的手机号码等信息。

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

第四步:设置监听器里面需要执行的操作,这里我就直接插入一条记录就行了。

public function handle(SendPhoneCodeEvent $event)
{
  AuthCode::create($event->data);
}

第五步:触发事件。

use App\Events\SendPhoneCodeEvent;
...
$data = [
  'findBy' => $findBy,
  'auth_code' => $code,
  'customer_id' => $customer_id,
  'expire_time' => date('Y-m-d H:i:s', time() + 300),
];
#触发事件
event(new SendPhoneCodeEvent($data));

自己的想法:

1、事件的作用其实可以被一个方法代替,你在需要调用的地方引用一下,然后执行这个方法就行了。但是事件有个好处,他默认使用队列来处理,可以用来操作那些比较耗时的操作,例如发送邮件,发送验证码等等。

2、代码比较整洁,看起来会舒服一点。

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
example1.php
Oct 09 PHP
很实用的一个完整email发送程序
Oct 09 PHP
封装一个PDO数据库操作类代码
Sep 09 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 PHP
php+ajax实现无刷新分页
Nov 18 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
Nov 08 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
PHP回调函数概念与用法实例分析
Nov 03 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 #PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 #PHP
PHP实现的杨辉三角求解算法分析
Mar 11 #PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 11 #PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
Mar 11 #PHP
PHP join()函数用法与实例讲解
Mar 11 #PHP
PHP lcfirst()函数定义与用法
Mar 08 #PHP
You might like
谈PHP生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
网页javascript精华代码集
2007/01/24 Javascript
JavaScript 字符串连接性能优化
2008/12/20 Javascript
IE 下的只读 innerHTML
2009/08/21 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
如何为你的JavaScript代码日志着色详解
2019/04/08 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python 测试实现方法
2008/12/24 Python
Python的IDEL增加清屏功能实例
2017/06/19 Python
python3+PyQt5实现柱状图
2018/04/24 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
学校元旦晚会方案
2014/02/19 职场文书
化工操作工岗位职责
2014/04/29 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
停发工资证明范本
2015/06/12 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
python基础学习之递归函数知识总结
2021/05/26 Python
k8s部署redis cluster集群的实现
2021/06/24 Redis