Laravel如何实现事件和监听器?(Event & Listener实战)
发布时间 - 2025-12-15 00:00:00 点击率:次Laravel事件与监听器机制用于解耦业务逻辑,通过定义事件类、创建监听器、注册关系及触发事件四步实现;事件为数据载体,监听器处理逻辑,需在EventServiceProvider中配置映射,并确保EventServiceProvider已注册。
Laravel 的事件与监听器机制,是解耦业务逻辑、响应系统动作的常用方式。它不是“必须用”,但当某个操作需要触发多个后续行为(比如用户注册后发邮件、写日志、通知管理员),用事件+监听器比硬编码更清晰、更易维护。
1. 定义事件类
事件本质是一个普通 PHP 类,通常不带逻辑,只负责携带数据。运行命令生成:
php artisan make:event UserRegistered生成的 UserRegistered.php 默认在 app/Events 目录下。你可以往里面加一个 public 属性,比如:
class UserRegistered
{
pub
lic $user;
public function __construct(User $user)
{
$this->user = $user;
}
}
2. 创建监听器
监听器是真正干活的地方。生成命令:
php artisan make:listener SendWelcomeEmail --event=UserRegistered生成的监听器位于 app/Listeners,Laravel 会自动把事件实例注入到 handle 方法中:
class SendWelcomeEmail
{
public function handle(UserRegistered $event)
{
// $event->user 就是注册的用户对象
Mail::to($event->user)->send(new WelcomeMail($event->user));
}
}
3. 注册事件与监听器关系
打开 app/Providers/EventServiceProvider.php,在 $listen 数组里配对:
protected $listen = [
Events\UserRegistered::class => [
Listeners\SendWelcomeEmail::class,
Listeners\LogUserRegistration::class,
Listeners\NotifyAdmin::class,
],
];
配好之后,Laravel 启动时会自动绑定。你不需要手动触发绑定。
4. 触发事件
在业务代码里(比如控制器或服务类中),用 event() 辅助函数或 Event::dispatch():
- event(new UserRegistered($user));
- Event::dispatch(new UserRegistered($user));
只要事件被触发,所有注册的监听器就会按顺序执行(默认同步)。如果想异步执行,监听器需实现 ShouldQueue 接口,并确保队列服务已配置。
基本上就这些。不复杂但容易忽略的是:别忘了在 config/app.php 中确认 App\Providers\EventServiceProvider::class 已在 providers 数组里注册——新项目默认已有,老项目升级或手动搭建时可能漏掉。
# php
# laravel
# 编码
# app
# ai
# 用户注册
# red
# 接口
# class
# public
# Event
# 事件
# 异步
# 绑定
# 的是
# 是一个
# 组里
# 就会
# 多个
# 已有
# 你不
# 你可
# 已在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251811 】
【
AI营销90571 】
相关推荐:
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
如何用西部建站助手快速创建专业网站?
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
php json中文编码为null的解决办法
WordPress 子目录安装中正确处理脚本路径的完整指南
敲碗10年!Mac系列传将迎来「触控与联网」双革新
实例解析angularjs的filter过滤器
如何快速辨别茅台真假?关键步骤解析
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
如何为不同团队 ID 动态生成多个独立按钮
Android okhttputils现在进度显示实例代码
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
北京企业网站设计制作公司,北京铁路集团官方网站?
如何用PHP快速搭建高效网站?分步指南
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
微信小程序 闭包写法详细介绍
JavaScript模板引擎Template.js使用详解
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
三星网站视频制作教程下载,三星w23网页如何全屏?
IOS倒计时设置UIButton标题title的抖动问题
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何快速打造个性化非模板自助建站?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
长沙企业网站制作哪家好,长沙水业集团官方网站?
长沙做网站要多少钱,长沙国安网络怎么样?
网站制作报价单模板图片,小松挖机官方网站报价?
QQ浏览器网页版登录入口 个人中心在线进入
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
高防服务器租用指南:配置选择与快速部署攻略
如何在搬瓦工VPS快速搭建网站?
如何用美橙互联一键搭建多站合一网站?
详解Huffman编码算法之Java实现
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何续费美橙建站之星域名及服务?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Laravel如何使用Blade模板引擎?(完整语法和示例)
如何快速生成可下载的建站源码工具?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
如何基于云服务器快速搭建个人网站?
如何在宝塔面板中创建新站点?
西安专业网站制作公司有哪些,陕西省建行官方网站?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
用yum安装MySQLdb模块的步骤方法


lic $user;
public function __construct(User $user)
{
$this->user = $user;
}
}