新闻中心

Lar*el如何实现事件和监听器?(Event & Listener实战)

2025-12-15
浏览次数:
返回列表
Lar*el事件与监听器机制用于解耦业务逻辑,通过定义事件类、创建监听器、注册关系及触发事件四步实现;事件为数据载体,监听器处理逻辑,需在EventServiceProvider中配置映射,并确保EventServiceProvider已注册。

laravel如何实现事件和监听器?(event & listener实战)

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

可分享的AI播客内容生成器和效率工具

星声AI 185 查看详情 星声AI
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\EventServiceProvider::class 已在 providers 数组里注册——新项目默认已有,老项目升级或手动搭建时可能漏掉。

以上就是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版永久访问通道  顺丰快递查单号物流信息 顺丰快递小程序查询入口 

搜索