首页 > php框架 > Laravel > 正文

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

裘德小鎮的故事
发布: 2025-12-15 03:17:16
原创
890人浏览过
Laravel事件与监听器机制用于解耦业务逻辑,通过定义事件类、创建监听器、注册关系及触发事件四步实现;事件为数据载体,监听器处理逻辑,需在EventServiceProvider中配置映射,并确保EventServiceProvider已注册。

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

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 数组里配对:

Pinokio
Pinokio

Pinokio是一款开源的AI浏览器,可以安装运行各种AI模型和应用

Pinokio 232
查看详情 Pinokio
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 数组里注册——新项目默认已有,老项目升级或手动搭建时可能漏掉。

以上就是Laravel如何实现事件和监听器?(Event & Listener实战)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号