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
{
    public $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模块的步骤方法