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 相关文章推荐
谈谈PHP语法(4)
Oct 09 PHP
服务器端解压缩zip的脚本
Dec 22 PHP
PHP memcache扩展的三种安装方法
Apr 26 PHP
fgetcvs在linux的问题
Jan 15 PHP
php遍历所有文件及文件夹的方法深入解析
Jun 08 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
php超快高效率统计大文件行数
Jul 05 PHP
Smarty使用自定义资源的方法
Aug 08 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
ThinkPHP打水印及设置水印位置的方法
Oct 14 PHP
php双层循环(九九乘法表)
Oct 23 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 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 smarty函数扩展
2010/03/15 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
form自动提交实例讲解
2017/07/10 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
Angularjs基础知识及示例汇总
2015/01/22 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
python for 循环获取index索引的方法
2019/02/01 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
台湾家适得:Homeget
2019/02/11 全球购物
越南综合购物网站:Lazada越南
2019/06/10 全球购物
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
初中同学聚会感言
2014/02/11 职场文书
龙门石窟导游词
2015/02/02 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
DE1103使用报告
2022/04/05 无线电