68publishers / event-dispatcher-extra
扩展程序,它将全局和本地事件派发器组合在一起,并通过网桥集成到Nette框架中。
v1.2.0
2024-08-05 23:26 UTC
Requires
- php: ^7.3 || ^8.1
- symfony/event-dispatcher: ^5.0 || ^6.0 || ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.1
- mockery/mockery: ^1.4
- nette/bootstrap: ^3.0
- nette/di: ^3.0.3
- nette/tester: ^2.3.4
- roave/security-advisories: dev-master
Suggests
- nette/di: For an integration with Nette Framework.
Conflicts
- nette/di: <3.0
- nette/schema: <1.1
README
✨ 扩展程序,它将全局和本地事件派发器组合在一起,并通过网桥集成到 Nette框架。全局事件派发器是在DI容器中注册为服务的那一个。本地事件派发器是每个创建的对象的独特实例。
安装
安装68publishers/event-dispatcher-extra的最佳方式是使用Composer
composer require 68publishers/event-dispatcher-extra
集成到Nette框架中
你所需要做的就是注册一个编译器扩展
extensions: 68publishers.event_dispatcher_extra: SixtyEightPublishers\EventDispatcherExtra\Bridge\Nette\DI\EventDispatcherExtraExtension
该扩展期望DI容器中有一个类型为 Symfony\Component\EventDispatcher\EventDispatcherInterface
的服务,因此你可以使用任何集成到Nette框架中的 symfony/event-dispatcher
,或者你可以简单地注册该服务
services: - type: Symfony\Component\EventDispatcher\EventDispatcher factory: Symfony\Component\EventDispatcher\EventDispatcher
示例用法
服务和工厂
<?php use Symfony\Contracts\EventDispatcher\Event; use SixtyEightPublishers\EventDispatcherExtra\EventDispatcherAwareTrait; use SixtyEightPublishers\EventDispatcherExtra\EventDispatcherAwareInterface; final class MyService implements EventDispatcherAwareInterface { use EventDispatcherAwareTrait; public function doSomething() : void { $this->getEventDispatcher()->dispatch(new Event(), 'something'); } } interface MyServiceFactoryInterface { public function create() : MyService; }
<?php /** @var MyServiceFactoryInterface $factory */ $service1 = $factory->create(); $service2 = $factory->create(); # attach a local event listener on specific instance: $service1->getEventDispatcher()->addListener('something', static function () { # do some stuff here }); # the "global" listeners and subscribers will be called as first and then will be called "local" listener defined above: $service1->doSomething(); # only the "global" listeners and subscribers will be called: $service2->doSomething();
贡献
在提交任何更改之前,请不要忘记运行
$ vendor/bin/php-cs-fixer fix --config=.php_cs.dist -v --dry-run
和
$ composer run tests