zhem4ag / event-snoozer
延迟调度事件。
v2.0.0
2017-07-27 11:36 UTC
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: 2024-09-29 04:14:25 UTC
README
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 在后台运行它。