分享个简单易懂且非常有用的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


相关推荐: Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Android自定义listview布局实现上拉加载下拉刷新功能  Laravel如何处理和验证JSON类型的数据库字段  JavaScript如何实现音频处理_Web Audio API如何工作?  Python结构化数据采集_字段抽取解析【教程】  Android仿QQ列表左滑删除操作  香港服务器如何优化才能显著提升网站加载速度?  HTML 中动态设置元素 name 属性的正确语法详解  Bootstrap CSS布局之列表  如何在建站之星绑定自定义域名?  js实现点击每个li节点,都弹出其文本值及修改  油猴 教程,油猴搜脚本为什么会网页无法显示?  iOS发送验证码倒计时应用  Laravel如何处理文件下载请求?(Response示例)  Python面向对象测试方法_mock解析【教程】  Python制作简易注册登录系统  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  个人网站制作流程图片大全,个人网站如何注销?  如何用腾讯建站主机快速创建免费网站?  Laravel如何实现事件和监听器?(Event & Listener实战)  如何在Tomcat中配置并部署网站项目?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  潮流网站制作头像软件下载,适合母子的网名有哪些?  Android利用动画实现背景逐渐变暗  如何有效防御Web建站篡改攻击?  Laravel如何使用Sanctum进行API认证?(SPA实战)  Laravel如何使用Service Container和依赖注入?(代码示例)  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何用美橙互联一键搭建多站合一网站?  如何快速查询网址的建站时间与历史轨迹?  浅述节点的创建及常见功能的实现  音响网站制作视频教程,隆霸音响官方网站?  Android GridView 滑动条设置一直显示状态(推荐)  在线制作视频的网站有哪些,电脑如何制作视频短片?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  深圳网站制作平台,深圳市做网站好的公司有哪些?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  Laravel怎么上传文件_Laravel图片上传及存储配置  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  使用spring连接及操作mongodb3.0实例  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  Laravel如何创建自定义中间件?(Middleware代码示例)  如何在Windows虚拟主机上快速搭建网站?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  如何快速生成凡客建站的专业级图册?  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】