用户模块的事件系统用于在用户生命周期的关键节点触发事件,允许其他模块或系统组件响应这些事件并执行相应的操作。这种设计实现了模块间的松耦合,提高了系统的可扩展性和可维护性。
当新用户创建时触发。
事件类: App\Module\User\Events\UserCreatedEvent
事件数据:
/**
* 用户模型
* @var User
*/
public User $user;
触发时机:
当用户信息更新时触发。
事件类: App\Module\User\Events\UserUpdatedEvent
事件数据:
/**
* 用户模型
* @var User
*/
public User $user;
/**
* 更新前的数据
* @var array
*/
public array $original;
触发时机:
当用户状态变更时触发。
事件类: App\Module\User\Events\UserStatusChangedEvent
事件数据:
/**
* 用户模型
* @var User
*/
public User $user;
/**
* 变更前的状态
* @var int
*/
public int $oldStatus;
/**
* 变更后的状态
* @var int
*/
public int $newStatus;
触发时机:
当用户详细信息更新时触发。
事件类: App\Module\User\Events\UserInfoUpdatedEvent
事件数据:
/**
* 用户信息模型
* @var UserInfo
*/
public UserInfo $userInfo;
/**
* 更新前的数据
* @var array
*/
public array $original;
触发时机:
监听用户相关事件,执行相应的操作。
监听器类: App\Module\User\Listeners\UserEventListener
职责:
用户模块通过服务提供者注册事件和监听器:
/**
* 用户模块服务提供者
*/
class UserServiceProvider extends ServiceProvider
{
/**
* 事件到监听器的映射
*
* @var array
*/
protected $listen = [
UserCreatedEvent::class => [
UserEventListener::class . '@handleUserCreated',
],
UserUpdatedEvent::class => [
UserEventListener::class . '@handleUserUpdated',
],
UserStatusChangedEvent::class => [
UserEventListener::class . '@handleUserStatusChanged',
],
UserInfoUpdatedEvent::class => [
UserEventListener::class . '@handleUserInfoUpdated',
],
];
/**
* 需要注册的订阅者
*
* @var array
*/
protected $subscribe = [
UserEventListener::class,
];
// ...
}
// 创建用户后触发事件
$user = User::create($userData);
event(new UserCreatedEvent($user));
// 更新用户后触发事件
$original = $user->getOriginal();
$user->update($userData);
event(new UserUpdatedEvent($user, $original));
// 变更用户状态后触发事件
$oldStatus = $user->status2;
$user->status2 = $newStatus;
$user->save();
event(new UserStatusChangedEvent($user, $oldStatus, $newStatus));
// 更新用户信息后触发事件
$original = $userInfo->getOriginal();
$userInfo->update($userInfoData);
event(new UserInfoUpdatedEvent($userInfo, $original));
// 在其他模块中监听用户事件
protected $listen = [
UserCreatedEvent::class => [
SendWelcomeEmailListener::class,
],
UserStatusChangedEvent::class => [
NotifyUserStatusChangeListener::class,
],
];
用户模块的事件系统可以与其他模块集成,实现跨模块功能:
通知模块可以监听用户事件,向相关用户发送通知:
// 在通知模块的服务提供者中
protected $listen = [
UserCreatedEvent::class => [
SendWelcomeNotificationListener::class,
],
UserStatusChangedEvent::class => [
SendStatusChangeNotificationListener::class,
],
];
统计模块可以监听用户事件,更新相关统计数据:
// 在统计模块的服务提供者中
protected $listen = [
UserCreatedEvent::class => [
UpdateUserStatisticsListener::class,
],
UserStatusChangedEvent::class => [
UpdateActiveUserStatisticsListener::class,
],
];
日志模块可以监听用户事件,记录详细的操作日志:
// 在日志模块的服务提供者中
protected $listen = [
UserCreatedEvent::class => [
LogUserCreationListener::class,
],
UserUpdatedEvent::class => [
LogUserUpdateListener::class,
],
UserStatusChangedEvent::class => [
LogUserStatusChangeListener::class,
],
UserInfoUpdatedEvent::class => [
LogUserInfoUpdateListener::class,
],
];