分享个简单易懂且非常有用的laravel事件

发布时间 - 2026-01-11 02:53:12    点击率:

前言

在开始本文的正文之前,我们先说一下在什么场景会使用这个事件功能。

事情大概是这样的,需求要在用户注册的时候发一些帮助邮件给用户(原本用户在注册之后已经有发别的邮件的了,短信,IM什么的)

原来这个注册的方法也就10多行代码。但是有时候我们为了省事,直接在注册代码后面添加了各种代码。

例如这个注册方法本来是这样的

<?php
namespace App\Htt\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
 public function register(Request $request)
 {
  //获取参数
  //验证参数
  //写入数据库
  //return 注册信息
  
  
 }
}

现在有一个需求,要求注册之后给用户的邮箱发一个广告,绝大多数的人(也包括以前的我)就直接在这后面接着写代码了

<?php
namespace App\Htt\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
 public function register(Request $request)
 {
  //获取参数
  //验证参数
  //写入数据库
  
  //发送广告邮件
  //return 注册信息
  
  
 }
}

这是比较直观的写法,后来又有需求要发个短信。

<?php
namespace App\Htt\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
 public function register(Request $request)
 {
  //获取参数
  //验证参数
  //写入数据库
  
  //发送广告邮件
  //发送短信
  //return 注册信息
  
  
 }
}

然后又有需求,要发IM消息,这样的需求很多。这些方法如果你封装了,可能也就一行代码。

但是,在实际项目中,这个注册方法里面已经加了很多东西。如果多人开发的话各种不方便。然后想到了laravel似乎有这个功能,但是一直都不知道怎么应用,仔细看了一下手册,发现和自己的想法不谋而合。

laravel的事件功能实际上更倾向是一种管理手段,并不是没了它我们就做不到了,只是它能让我们做得更加好,更加优雅。

laravel的事件是一种管理+实现的体现,它首先有一个总的目录,然后我们可以宏观的看到所有的事件,而不需要每次都要打开控制器的方法我们才能知道注册后会发生什么,这一点很重要,非常的方便,我就不按着laravel的顺序来讲,而是按着实际情况来建立这种关系。

现在我们无非就是要在注册之后要做一系列的事情,首先得注册完之后调用一个事件,然后这个事件再做各种各样的事

<?php
namespace App\Htt\Controllers;

use Illuminate\Http\Request;
//我们先引入一个事件类,名字自定义的,之后再一步一步创建
use App\Events\Register;

class UserController extends Controller
{
 public function register(Request $request)
 {
  //获取参数
  //验证参数
  //写入数据库
  //触发事件,以后所有需要注册后要做的事情,都不需要再这里加代码了,我们只需要管理事件就好了
  //event方法是laravel自带方法, $uid是外部参数,看你需要做什么,传什么参数了。注册之后肯定有$uid的嘛
  event(new Register($uid));
  //return 注册信息
  
  
 }
}

找到\app\Providers\EventServiceProvider.php文件。给它添加关系,告诉系统,有人用event()调用了事件之后要被谁监听得到。

<?php

namespace App\Providers;

use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
 /**
  * The event listener mappings for the application.
  *
  * @var array
  */
 protected $listen = [
  // 用户注册后的事件
  'App\Events\Register' => [
   // 发送广告邮件
   'App\Listeners\SendAdMail',
   // 发送短信
   'App\Listeners\SendSms',
   // 发送帮助信息
   'App\Listeners\SendHelpInformation',

  ],
 ];
}

这里是注册事件的入口,相当于一个总目录,这样就可以跟注册代码解耦了,以后要加东西我们就不需要再去看注册方法的代码了

现在注册完之后会触发这个App\Events\Register类,然后这个类会被App\Listeners\SendAdMail,App\Listeners\SendSms,App\Listeners\SendHelpInformation监听得到,我们进入app\Events目录,创建Register这个类

<?php

namespace App\Events;

class Register
{

 public $uid;

 /**
  * 创建一个新的事件实例.
  *
  * @param Order $order
  * @return void
  */
 public function __construct($uid)
 {
  $this->uid = $uid;
 }
}

这样就可以了。

然后去app\Listeners目录创建各种要做的事件监听类。

<?php

namespace App\Listeners;

use App\Events\Register;
use App\Models\User;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendHelpInformation implements ShouldQueue
{
 
 
 public function __construct()
 {
  //
 }

 
 public function handle(Register $event)
 {
  $uid = $event->uid;
  
  $user = User::find($uid);
  
  //......各种实现
 }
}

这个handle方法就是我们要做的具体实现了,有个很方便的功能就是如果implements ShouldQueue这个接口的话就会异步队列执行,如果去掉的话就是同步执行。很方便有没有,这样代码就解耦了,不需要再管注册代码了,在这里就能很方便的管理了。多人开发也是单独写自己的Listeners就可以了。

具体的建议大家去看看手册吧,有些内容我这里就不完全说了。我只是抛砖引玉

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# laravel  # 事件  # laravel5.4  # 模型事件  # Laravel框架实现利用监听器进行sql语句记录功能  # Laravel给生产环境添加监听事件(SQL日志监听)  # 深入解析PHP的Laravel框架中的event事件操作  # 利用Laravel事件系统如何实现登录日志的记录详解  # Laravel模型事件的实现原理详解  # laravel学习笔记之模型事件的几种用法示例  # Laravel事件监听器用法实例分析  # 要做  # 自己的  # 不需  # 很方便  # 是一种  # 要再  # 就可以  # 也就  # 是这样  # 又有  # 要在  # 后会  # 用户注册  # 发送短信  # 按着  # 有一个  # 的人  # 这是  # 我就  # 就会 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 北京的网站制作公司有哪些,哪个视频网站最好?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  微信小程序 scroll-view组件实现列表页实例代码  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  北京网站制作的公司有哪些,北京白云观官方网站?  Java遍历集合的三种方式  如何在阿里云服务器自主搭建网站?  如何正确选择百度移动适配建站域名?  网站优化排名时,需要考虑哪些问题呢?  免费视频制作网站,更新又快又好的免费电影网站?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何用AWS免费套餐快速搭建高效网站?  如何快速生成橙子建站落地页链接?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  详解Android——蓝牙技术 带你实现终端间数据传输  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel如何使用Telescope进行调试?(安装和使用教程)  iOS发送验证码倒计时应用  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  如何破解联通资金短缺导致的基站建设难题?  如何在新浪SAE免费搭建个人博客?  android nfc常用标签读取总结  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Android仿QQ列表左滑删除操作  简单实现Android验证码  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Linux网络带宽限制_tc配置实践解析【教程】  javascript中闭包概念与用法深入理解  三星网站视频制作教程下载,三星w23网页如何全屏?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  大连 网站制作,大连天途有线官网?  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Python面向对象测试方法_mock解析【教程】  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何在阿里云ECS服务器部署织梦CMS网站?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  网站制作软件免费下载安装,有哪些免费下载的软件网站?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel如何自定义错误页面(404, 500)?(代码示例)  网站制作免费,什么网站能看正片电影?  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  无锡营销型网站制作公司,无锡网选车牌流程?  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  如何快速生成凡客建站的专业级图册?  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程