zumba / symbiosis
Symbiosis,用于引导插件的事件结构。
v3.0.2
2020-10-21 21:04 UTC
Requires
- php: >=7.2
- psr/event-dispatcher: ^1.0
- psr/log: ^1.1
Requires (Dev)
- phpunit/phpunit: ^8
README
Symbiosis 是一个即插即用的事件驱动插件架构。
目标是允许任何人通过面向事件系统为现有的代码库创建插件结构。使用 Symbiosis 的次要好处是事件结构可以独立于插件结构使用。
要求
PHP 7.2
设置
- 将其作为 composer 依赖项添加,或直接从 composer 安装。
- 就是这样!
测试
- 运行
composer install --dev
。 - 运行
./vendor/bin/phpunit
。
示例插件使用
插件
<?php namespace \YourApp\Plugin; use \Zumba\Symbiosis\Framework\Plugin, \Zumba\Symbiosis\Event\EventManager, \Zumba\Symbiosis\Framework\Registerable; class SamplePlugin extends Plugin implements Registerable { public function getEvents() { return [ 'sample.someevent' => function($event) { print_r($event->data()); }); ]; } }
您的应用程序引导
<?php use \Zumba\Symbiosis\Plugin\PluginManager; // Somewhere in your application bootstrap, load your plugins $pluginManager = new PluginManager( '/path/to/your/plugin/directory', // Path to where you stored your plugins 'YourApp\Plugin' // namespace defined in your plugins (see example above) ); $pluginManager->loadPlugins();
您的应用程序
<?php use \Zumba\Symbiosis\Event\Event; // Somewhere in your app, trigger plugins listening to event $pluginManager->trigger(new Event('sample.someevent', ['ping' => 'pong']));
输出
Array
(
[ping] => pong
)
单独的事件注册表
从 v1.2
版本开始,已添加事件注册表以允许事件分离。这允许对事件注册表进行“命名空间化”。由于 EventManager
保持向后兼容,现在 EventManager
创建了一个静态的 EventRegistry
实例。由于事件结构在插件架构中松散耦合,这允许您按插件对事件注册表进行命名空间化。
示例事件注册表命名空间化
<?php $registry1 = new \Zumba\Symbiosis\Event\EventRegistry(); $registry2 = new \Zumba\Symbiosis\Event\EventRegistry(); $registry1->register('sample.someevent', function ($event) { print_r($event->data()); }); $registry2->register('sample.someevent', function ($event) { echo "Separate registry\n"; print_r($event->data()); }); $event = new \Zumba\Symbiosis\Event\Event('sample.someevent', array('ping' => 'pong')); $registry1->dispatch($event); // Prints: // Array( // [ping] => pong // ) $registry2->dispatch($event); // Prints: // Separate registry // Array( // [ping] => pong // )
PSR-14 支持
此库与 PSR-14 兼容。
一个需要注意的问题是,
EventRegistry
需要注册实现了\Zumba\Symbiosis\Framework\EventInterface
的事件,这包括实现了\Psr\EventDispatcher\StoppableEventInterface
。
EventRegistry
实现
\Psr\EventDispatcher\ListenerProviderInterface
\Psr\EventDispatcher\EventDispatcherInterface
Event
实现
\Psr\EventDispatcher\StoppableEventInterface
有关更多详细信息,请参阅 PSR-14 事件调度器文档。