新闻中心
Lar*el如何实现事件和监听器?(Event & Listener实战)
Lar*el事件与监听器机制用于解耦业务逻辑,通过定义事件类、创建监听器、注册关系及触发事件四步实现;事件为数据载体,监听器处理逻辑,需在EventServiceProvider中配置映射,并确保EventServiceProvider已注册。

Lar*el 的事件与监听器机制,是解耦业务逻辑、响应系统动作的常用方式。它不是“必须用”,但当某个操作需要触发多个后续行为(比如用户注册后发邮件、写日志、通知管理员),用事件+监听器比硬编码更清晰、更易维护。
1. 定义事件类
事件本质是一个普通 PHP 类,通常不带逻辑,只负责携带数据。运行命令生成:
php artisan make:event UserRegistered生成的 UserRegistered.php 默认在 app/Events 目录下。你可以往里面加一个 public 属性,比如:
class UserRegistered
{
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
}
2. 创建监听器
监听器是真正干活的地方。生成命令:
php artisan make:listener SendWelcomeEmail --event=UserRegistered生成的监听器位于 app/Listeners,Lar*el 会自动把事件实例注入到 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 数组里配对:
星声AI
可分享的AI播客内容生成器和效率工具
185
查看详情
protected $listen = [
Events\UserRegistered::class => [
Listeners\SendWelcomeEmail::class,
Listeners\LogUserRegistration::class,
Listeners\NotifyAdmin::class,
],
];
配好之后,Lar*el 启动时会自动绑定。你不需要手动触发绑定。
4. 触发事件
在业务代码里(比如控制器或服务类中),用 event() 辅助函数或 Event::dispatch():
- event(new UserRegistered($user));
- Event::dispatch(new UserRegistered($user));
只要事件被触发,所有注册的监听器就会按顺序执行(默认同步)。如果想异步执行,监听器需实现 ShouldQueue 接口,并确保队列服务已配置。
基本上就这些。不复杂但容易忽略的是:别忘了在 config/app.php 中确认 App\Providers\EventServiceProv 已在
ider::classproviders 数组里注册——新项目默认已有,老项目升级或手动搭建时可能漏掉。
以上就是Lar*el如何实现事件和监听器?(Event & Listener实战)的详细内容,更多请关注php中文网其它相关文章!
# 是一个
# 延边州百度网站优化
# 餐饮线下营销推广
# 网站建设人工智能
# 推广营销在哪里做比较好
# 佰草集网络营销推广方案
# 地铁科技网站建设方案
# 福建互联网网站建设好处
# 南岗seo与网站优化
# 抖音热门推广营销号技巧
# 响应式网站建设开发
# 就会
# 组里
# php
# 各版
# 的是
# 如何将
# 报错
# 如何实现
# 绑定
# red
# 用户注册
# ai
# app
# 编码
# laravel
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧
铁路12306的积分有效期是多久_铁路12306积分有效期说明
海棠账号登录入口_登录海棠账户同步阅读记录
响应式容器内容自动缩放与宽高比维持教程
Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】
vivo云服务网页版登录 怎么登录vivo云服务网页版
Win11网速慢怎么解决 Win11网络设置优化解除限速
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析
Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值
LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理
蛙漫2台版漫画地址 Manwa2正版网页版链接
sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置
AO3最新入口2025公告_AO3中文官网合集
包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址
浏览器打开即用 美图秀秀网页版入口
大麦的“候补”是什么意思 大麦候补购票规则【详解】
抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程
在哪找SublimeJ远程工具_SFTP插件配置教程
支付宝如何设置安全保护_支付宝安全设置的全面教程
Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法
R星幕后开发视频泄露 包含《GTA6》等多款大作
从OpenAI API响应中高效提取生成文本
C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度
css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异
12306选座怎么选到临时改签座_12306改签选座策略与步骤
漫蛙2正版漫画站 漫蛙2网页版快速访问入口
漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接
Win11输入法不见了怎么办_Windows11恢复语言栏显示方法
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
mc.js免安装版 mc.js一键畅玩入口
uc浏览器网页版入口 uc浏览器网页版最新网址
深入理解Go语言中的指针类型:以*string为例
J*aScript map 方法中处理循环元素为空数组的策略
C++如何比较两个字符串_C++ string compare函数与操作符对比
Python实时数据流中的动态最值查找策略
抖音未来赚钱的新趋势 2025年值得关注的变现风口分析
外媒分析《GTA6》定价:卖100美元可以但真没必要!
如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构
Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧
在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明
优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践
Mac怎么锁定备忘录_Mac备忘录加密设置教程
Flexbox布局实践:实现粘性导航栏与底部固定页脚
composer的"require-dev"部分是用来做什么的?
天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】
漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道
顺丰快递查单号物流信息 顺丰快递小程序查询入口


2025-12-15
浏览次数:次
返回列表