onoi/event-dispatcher

将通用事件传递给注册监听器的一种简约接口

1.1.0 2019-01-27 03:37 UTC

This package is auto-updated.

Last update: 2024-08-29 04:08:48 UTC


README

Build Status Code Coverage Scrutinizer Code Quality Latest Stable Version Packagist download count

这是一个简约的事件分发器(观察者)接口,曾是Semantic MediaWiki代码库的一部分,现在作为一个独立的库被部署。

需求

PHP 5.3/HHVM 3.3 或更高版本

安装

此库的推荐安装方法是通过将依赖添加到您的 composer.json 文件中。

{
	"require": {
		"onoi/event-dispatcher": "~1.0"
	}
}

使用方法

class BarListener implements EventListener {

	public function execute( DispatchContext $dispatchContext = null ) {
		// Do something
	}

	public function isPropagationStopped() {
		return false;
	}
}
class ListenerCollectionRegistry implements EventListenerCollection {

	private $eventListenerCollection;

	public function __construct( EventListenerCollection $eventListenerCollection ) {
		$this->eventListenerCollection = $eventListenerCollection;
	}

	public function getCollection() {
		return $this->addToListenerCollection()->getCollection();
	}

	private function addToListenerCollection() {

		$this->eventListenerCollection->registerCallback( 'do.something', function() {
			// Do something
		} );

		$this->eventListenerCollection->registerListener( 'notify.bar', new BarListener() );

		return $this->eventListenerCollection;
	}
}
$eventDispatcherFactory = new EventDispatcherFactory();

$listenerCollectionRegistry = new ListenerCollectionRegistry(
	$eventDispatcherFactory->newGenericEventListenerCollection()
);

$eventDispatcher = $eventDispatcherFactory->newGenericEventDispatcher();
$eventDispatcher->addListenerCollection( $listenerCollectionRegistry );

class Foo {

	use EventDispatcherAwareTrait;

	public function doSomething() {

		// No context
		$this->eventDispatcher->dispatch( 'do.something' );

		$dispatchContext = new DispatchContext();
		$dispatchContext->set( 'dosomethingelse', new \stdClass );

		// Using `DispatchContext`
		$this->eventDispatcher->dispatch( 'notify.bar', $dispatchContext );

		// Using an array as context which is later converted into
		// a `DispatchContext`
		$this->eventDispatcher->dispatch( 'notify.foo', [ 'Bar' => 123 ] );
	}
}

$instance = new Foo();
$instance->setEventDispatcher( $eventDispatcher );
$instance->doSomething();

贡献和支持

如果您想为该项目做出贡献,请订阅开发者邮件列表,并查看贡献指南。过去做出贡献的人名单可以在这里找到。

测试

该库提供了单元测试,覆盖了通常由持续集成平台运行的核心理念。也可以使用根目录中找到的PHPUnit配置文件手动执行测试。

发行说明

  • 1.1.0 (2019-01-27)
    • 允许EventDispatcher::dispatch接受数组作为上下文对象
    • 添加了EventNotDispatchableExceptionSubscriber接口
    • 添加了EventDispatcherAwareTrait
  • 1.0.0 首次发布(2015-03-25)

许可证

GNU通用公共许可证2.0或更高版本.