zhem4ag/event-snoozer

Snooze your events for later dispatch.

v2.0.0 2017-07-27 11:36 UTC

This package is not auto-updated.

Last update: 2024-04-28 02:03:02 UTC


README

Build Status SensioLabsInsight MIT Licence Code Climate

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.