PHPackages                             pollen-solutions/event - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. pollen-solutions/event

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

pollen-solutions/event
======================

Pollen Solutions - Event Component - PSR-14 Event dispatcher.

v1.0.1(4y ago)05635MITPHPPHP ^7.4 || ^8.0

Since Jul 7Pushed 3y ago1 watchersCompare

[ Source](https://github.com/pollen-solutions/event)[ Packagist](https://packagist.org/packages/pollen-solutions/event)[ Docs](https://www.presstify.com/pollen-solutions/event/)[ RSS](/packages/pollen-solutions-event/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (4)Versions (4)Used By (5)

Event Component
===============

[](#event-component)

[![Latest Version](https://camo.githubusercontent.com/478c7445e33a15d520d6b82972113f5df02434c584993421df01bd097db0a398/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72656c656173652d312e302e302d626c75653f7374796c653d666f722d7468652d6261646765)](https://www.presstify.com/pollen-solutions/event/)[![MIT Licensed](https://camo.githubusercontent.com/daa52099573be5a50c320c4387496400f2f722e49f86a42db8d5778130d3582d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e3f7374796c653d666f722d7468652d6261646765)](LICENSE.md)[![PHP Supported Versions](https://camo.githubusercontent.com/d9d71d0b69072c51e1ff7adfdb6270f896f75787500ce6437120e23727c081d1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d2533453d372e342d3838393242463f7374796c653d666f722d7468652d6261646765266c6f676f3d706870)](https://www.php.net/supported-versions.php)

Pollen Solutions **Event** Component provide a PSR-14 implementation of Event Dispatching.

Installation
------------

[](#installation)

```
composer require pollen-solutions/event
```

Basic Usage
-----------

[](#basic-usage)

### Simple way of events dispatching

[](#simple-way-of-events-dispatching)

```
use Pollen\Event\EventDispatcher;

// Create Dispatcher
$dispatcher = new EventDispatcher();

// Subscribe events
$dispatcher->on('event.demo', function () {
    var_dump('one');
});
$dispatcher->on('event.demo', function () {
    var_dump('two');
});

// Dispatch events
$dispatcher->trigger('event.demo');

// Output
// >> (string) 'one'
// >> (string) 'two'
```

### Prioritize the event dispatching

[](#prioritize-the-event-dispatching)

```
use Pollen\Event\EventDispatcher;

// Create Dispatcher
$dispatcher = new EventDispatcher();

// Subscribe events
$dispatcher->on('event.demo', function () {
    var_dump('one');
}, 10);
$dispatcher->on('event.demo', function () {
    var_dump('two');
}, 20);

// Dispatch events
$dispatcher->trigger('event.demo');

// Output
// >> (string) 'two'
// >> (string) 'one'
```

### Stoppable event propagation

[](#stoppable-event-propagation)

```
use Pollen\Event\EventDispatcher;
use Pollen\Event\StoppableEvent;

// Create Dispatcher
$dispatcher = new EventDispatcher();

// Subscribe events
$dispatcher->on('event.demo', function (StoppableEvent $e) {
    $e->stopPropagation();
    var_dump('one');
});
$dispatcher->on('event.demo', function () {
    var_dump('two');
});

// Dispatch events
$dispatcher->trigger('event.demo');

// Output
// >> (string) 'one'
```

### Passed arguments to event listeners

[](#passed-arguments-to-event-listeners)

```
use Pollen\Event\EventDispatcher;
use Pollen\Event\TriggeredEvent;

// Create Dispatcher
$dispatcher = new EventDispatcher();

// Subscribe events
$dispatcher->on('event.demo', function (TriggeredEvent $e, $arg1, $arg2) {
    var_dump('one', $arg1, $arg2);
    $e->setEventArgs(['newValue1', 'newValue2']);
});
$dispatcher->on('event.demo', function (TriggeredEvent $e, $arg1, $arg2) {
    var_dump('two', $arg1, $arg2);
});

// Dispatch events
$dispatcher->trigger('event.demo', ['value1', 'value2']);

// Output
// >> (string) 'one'
// >> (string) 'value1'
// >> (string) 'value2'
// >> (string) 'two'
// >> (string) 'newValue1'
// >> (string) 'newValue2'
```

### Once dispatch listener

[](#once-dispatch-listener)

```
use Pollen\Event\EventDispatcher;

// Create Dispatcher
$dispatcher = new EventDispatcher();

// Subscribe events
$dispatcher->one('event.demo', function () {
    var_dump('one');
});
$dispatcher->on('event.demo', function () {
    var_dump('two');
});

// Dispatch events
// First
$dispatcher->trigger('event.demo');
// Second
$dispatcher->trigger('event.demo');

// Output
// First dispatch
// >> (string) 'one'
// >> (string) 'two'
// Second dispatch
// >> (string) 'two'
```

### Dependencies injection container lazy loading and invokable class

[](#dependencies-injection-container-lazy-loading-and-invokable-class)

```
namespace {
use Pollen\Container\Container;
use Pollen\Event\EventDispatcher;

// Container Declaration
$container = new Container();

class ServiceDemoNamedClass
{
    public function __invoke($e, $v)
    {
        var_dump('one >> '. $v);
    }
}
$container->add(
    'container.service1',
    ServiceDemoNamedClass::class
);

class ServiceDemoClosuredClass
{
    public function __invoke($e, $v)
    {
        var_dump('two >> '. $v);
    }
}
$container->add(
    'container.service2',
    function () {
       return new ServiceDemoClosuredClass();
    }
);

// Class Declaration
class InvokableDemoClass
{
    public function __invoke($e, $v)
    {
        var_dump('three >> '. $v);
    }
}

class InstantiableDemoClass
{
    public function __invoke($e, $v)
    {
        var_dump('four >> '. $v);
    }
}

// Create Dispatcher
$dispatcher = new EventDispatcher([], $container);

// Subscribe events
// Good practice
$dispatcher->on('event.demo', 'container.service1');
$dispatcher->on('event.demo', 'container.service2');
$dispatcher->on('event.demo', InvokableDemoClass::class);
// Increased memory usage practice
$dispatcher->on('event.demo', new InstantiableDemoClass());

// Dispatch events
$dispatcher->trigger('event.demo', ['value']);
}
```

Advanced usage
--------------

[](#advanced-usage)

@todo

### Event subscriber

[](#event-subscriber)

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

3

Last Release

1776d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c1d9488545d6b446f8df86ec373a070e7fed1166fc47e1324d963e46d3d838d3?d=identicon)[presstify](/maintainers/presstify)

---

Top Contributors

[![jordy-manner](https://avatars.githubusercontent.com/u/733356?v=4)](https://github.com/jordy-manner "jordy-manner (4 commits)")

---

Tags

dispatchereventobserver-patternphpeventpsr-14componentdispatcherpollen-solutions

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/pollen-solutions-event/health.svg)

```
[![Health](https://phpackages.com/badges/pollen-solutions-event/health.svg)](https://phpackages.com/packages/pollen-solutions-event)
```

###  Alternatives

[contributte/event-dispatcher

Best event dispatcher / event manager / event emitter for Nette Framework

292.4M19](/packages/contributte-event-dispatcher)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
