Emit and listen to application events with the EventManager for decoupled cross-module communication.
Event Manager
use LaminasEventManagerEventManager;
use LaminasEventManagerEvent;
$events = new EventManager();
// Attach listener
$events->attach("user.registered", function(Event $e) {
$user = $e->getParam("user");
sendWelcomeEmail($user->email);
}, 100); // priority
$events->attach("user.registered", function(Event $e) {
$user = $e->getParam("user");
createProfile($user->id);
}, 50);
// Trigger event
$events->trigger("user.registered", $this, ["user" => $user]);
// Wildcard listener
$events->attach("*", function(Event $e) {
error_log("Event fired: " . $e->getName());
});
// SharedEventManager (cross-module events)
use LaminasEventManagerSharedEventManager;
$sharedEvents = new SharedEventManager();
$sharedEvents->attach(PostController::class, "save.post", function(Event $e) {
clearCache("posts");
});