zhem4ag/event-snoozer

延迟调度事件。

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

This package is not auto-updated.

Last update: 2024-09-29 04:14:25 UTC


README

Build Status SensioLabsInsight MIT Licence Code Climate

EventSnoozer

当前库允许您存储事件并在以后调度。

用法

  • 实现 EventStorageInterface 或使用 MemoryEventStorage。我建议使用数据库或缓存来存储事件。例如,我将使用 MemoryEventStorage。
    它将存储暂停的事件,直到脚本停止运行。

  • 创建您想要保存的事件类。您可以扩展 EventDispatcher 事件类,但如果您想指定额外的数据和/或优先级,请扩展 RealEvent 类。

<?php
  
namespace MyApp;
  
use EventSnoozer\RealEvent;  
  
class MyEvent extends RealEvent
{
    const NAME = 'my.event';
}
  • 实例化 EventSnoozer 类并使用它来保存事件。
<?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');
  • 使用 EventSnoozer 来调度保存的事件。
    MemoryEventStorage 将根据优先级和运行时顺序选择事件。
<?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

我建议使用 symfony/console 来创建控制台命令,并通过 cronjob 在后台运行它。