zhem4ag / event-snoozer
Snooze your events for later dispatch.
Installs: 2 849
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 1
Open Issues: 0
Requires
- php: >=7.0
- symfony/event-dispatcher: ^3.2
Requires (Dev)
- phpunit/phpunit: ^6.1
Suggests
- doctrine/common: Allows to save events in database
- symfony/console: For launching console jobs
This package is not auto-updated.
Last update: 2025-03-30 06:40:05 UTC
README
EventSnoozer
Current library allows You to store events and dispatch them later.
Usage
-
Implement EventStorageInterface or use MemoryEventStorage. I suggest to use database or cache for storing events. For example, I'll use MemoryEventStorage.
It will store snoozed events until script stop running. -
Create event class that you want to save. You could extend EventDispatcher Event class, but if you want to specify additional data and/or priority, extend RealEvent class.
<?php namespace MyApp; use EventSnoozer\RealEvent; class MyEvent extends RealEvent { const NAME = 'my.event'; }
- Instantiate EventSnoozer class and use it for saving events.
<?php namespace MyApp; use EventSnoozer\EventStorage\MemoryEventStorage; use EventSnoozer\EventSnoozer; use MyApp\MyEvent; use Symfony\Component\EventDispatcher\EventDispatcher; $eventStorage = new MemoryEventStorage(); $eventDispatcher = new EventDispatcher(); // Add listeners/subscribers for your events $eventSnoozer = new EventSnoozer($eventDispatcher, $eventStorage); $event = new MyEvent(); $event->setPriority(10) ->setAdditionalData(array('data' => 'value')); $eventSnoozer->snoozeEvent(MyEvent::NAME, $event, '+10 min');
- Use EventSnoozer for dispatching saved events.
MemoryEventStorage would select events ordered by priority and runtime.
<?php namespace MyApp; use EventSnoozer\EventStorage\MemoryEventStorage; use EventSnoozer\EventSnoozer; use Symfony\Component\EventDispatcher\EventDispatcher; $eventStorage = new MemoryEventStorage(); $eventDispatcher = new EventDispatcher(); // Add listeners/subscribers for your events $eventSnoozer = new EventSnoozer($eventDispatcher, $eventStorage); $eventSnoozer->dispatchSnoozedEvent(); // For single event $eventSnoozer->dispatchMultipleSnoozedEvents(5); // For multiple events
I suggest to use symfony/console for creating console commands and run it in background by cronjob.