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

1次阅读

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

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

Pippit AI

CapCut推出的AI创意内容生成工具

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

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

protected $listen = [     EventsUserRegistered::class => [         ListenersSendWelcomeEmail::class,         ListenersLogUserRegistration::class,         ListenersNotifyAdmin::class,     ], ];

配好之后,Laravel 启动时会自动绑定。你不需要手动触发绑定。

4. 触发事件

在业务代码里(比如控制器或服务类中),用 event() 辅助函数或 Event::dispatch()

  • event(new UserRegistered($user));
  • Event::dispatch(new UserRegistered($user));

只要事件被触发,所有注册的监听器就会按顺序执行(默认同步)。如果想异步执行,监听器需实现 ShouldQueue 接口,并确保队列服务已配置。

基本上就这些。不复杂但容易忽略的是:别忘了在 config/app.php 中确认 AppProvidersEventServiceProvider::class 已在 providers 数组里注册——新项目默认已有,老项目升级或手动搭建时可能漏掉。

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

text=ZqhQzanResources