Troubleshooting
Common issues and fixes for WPZylos Events.
Listener Not Called
Symptom: Your listener never receives the event.
Causes & Fixes:
- Event class mismatch
// Wrong - different class $provider->addListener(\App\Events\UserCreated::class, $handler); $dispatcher->dispatch(new \Other\UserCreated()); // Won't match! // Correct - same class $dispatcher->dispatch(new \App\Events\UserCreated()); - Listener registered after dispatch
// Wrong order $dispatcher->dispatch($event); $provider->addListener(Event::class, $handler); // Too late! // Correct order $provider->addListener(Event::class, $handler); $dispatcher->dispatch($event); - Earlier listener stopped propagation
// Check if event implements StoppableEventInterface $provider->addListener(Event::class, function ($e) { $e->stopPropagation(); // Stops subsequent listeners }, 1);
Subscriber Methods Not Called
Symptom: Subscriber registered but methods not invoked.
Fixes:
- Wrong method name
public static function getSubscribedEvents(): array { return [ UserCreated::class => 'onUserCreated', // Must match exactly ]; } public function onUserCreated($event) {} // Method name must match - Subscriber not added
// Don't forget to register it! $eventProvider->subscribe(new MySubscriber());
Memory Issues
Symptom: High memory usage with many events.
Fix: Clear listeners when done:
// In a long-running process
foreach ($items as $item) {
$dispatcher->dispatch(new ItemProcessed($item));
}
// Clear to free memory
$provider->clearListeners(ItemProcessed::class);
Circular Event Dispatch
Symptom: Maximum function nesting or infinite loop.
Fix: Avoid dispatching the same event from its listener:
// Bad: Bad - causes infinite loop
$provider->addListener(UserUpdated::class, function ($event) use ($dispatcher) {
$dispatcher->dispatch(new UserUpdated($event->user)); // Infinite!
});
// Good: Good - use a different event
$provider->addListener(UserUpdated::class, function ($event) use ($dispatcher) {
$dispatcher->dispatch(new UserProfileSynced($event->user));
});
Type Errors
Symptom: Type errors when dispatching events.
Fix: Ensure event class matches listener type hint:
// Listener expects UserCreated
$provider->addListener(UserCreated::class, function (UserCreated $event) {
// ...
});
// Bad: Wrong - string instead of object
$dispatcher->dispatch('UserCreated');
// Good: Correct - event object
$dispatcher->dispatch(new UserCreated($user));
Debug Mode
Enable debug logging:
class DebugEventDispatcher extends EventDispatcher
{
public function dispatch(object $event): object
{
error_log('Dispatching: ' . get_class($event));
$result = parent::dispatch($event);
error_log('Dispatched: ' . get_class($event));
return $result;
}
}