earc / observer
eArc - 显式架构框架 - psr-14 兼容观察者蓝图
1.1
2021-04-28 07:58 UTC
Requires
- php: ^7.2 || ^8.0
- earc/di: ^3.0
- psr/event-dispatcher: ^1.0
Requires (Dev)
- phpunit/phpunit: ^7.5 || ^8.5
README
earc/observer 是一个现成可扩展的 psr-14 兼容观察者蓝图。
安装
$ composer require earc/observer
引导
earc/observer 使用 earc/di 进行依赖注入。
use eArc\DI\DI; DI::init();
将上述代码放置在您的脚本/框架引导的章节中。
配置
earc/observer 不需要任何配置。
使用
事件
您的事件必须实现 EventInterface 以便由 earc/observer 的调度器调度。
use eArc\Observer\Interfaces\EventInterface; use eArc\Observer\Interfaces\ListenerInterface; class SomeEvent implements EventInterface { public static function getApplicableListener(): array { return [ListenerInterface::class]; } }
如果您想更具体,可以扩展 ListenerInterface。
注册监听器
您可以使用观察者对象来注册您的监听器
use eArc\Observer\Observer; $observer = di_get(Observer::class); $observer->registerListener(SomeListener::class);
或使用 earc/di 的标记(如果观察者实例尚未构建)
use eArc\Observer\Observer; di_tag(Observer::class, SomeListener::class);
提示:标记不会初始化观察者,也不会自动加载观察者类。两者都不会在调用处理事件之前自动加载监听器。
耐心
如果您传递一个 float 作为第二个或第三个参数,它将被解释为耐心。监听器越耐心,它被调用的越晚。
use eArc\Observer\Observer; $observer = di_get(Observer::class); $observer->registerListener(SomeListener::class, 0.2);
或(如果观察者实例尚未构建)
use eArc\Observer\Observer; di_tag(Observer::class, SomeListener::class, -12.7);
注销监听器
您可以通过以下方式注销
$observer->unregisterListener(SomeListener::class);
或(如果观察者实例尚未构建)
use eArc\Observer\Observer; di_clear_tags(Observer::class, SomeListener::class);
注意 di_tag() 和 di_clear_tags() 的不同语义。
调度事件
要调度您的事件,请使用调度器
use eArc\Observer\Dispatcher; $dispatcher = di_get(Dispatcher::class); $event = $dispatcher->dispatch($event);
它返回可能被监听器修改的事件。
高级用法
如果您想改变观察者的行为,您可以将其装饰为任何实现 ObserverInterface 的类。
use \eArc\Observer\Interfaces\ObserverInterface; di_decorate(ObserverInterface::class, TheNewObserver::class);
请注意,您项目中使用 earc/observer 的每个库都将在之后使用装饰类。因此,您可能被迫编写自己的调度器。您需要做的就是实现 DispatcherInterface。
发布版本
发布 1.1
- PHP ^7.2 || ^8.0
发布 1.0.3
- 修复耐心通过标签将浮点数转换为整数
- 完成文档
- 测试覆盖率 100% 的文档功能
发布 1.0.2
- 修复 PHP 无法识别 ['string' => $obj, 'method'] 作为可调用。
发布 1.0.1
- 添加监听器接口
发布 1.0
- 重写以兼容 psr-14
发布 0.0
- 初始发布