This package is a configuration wrapper for the yiisoft/event-dispatcher package. It is intended to make event listener declaration simpler than you could ever imagine. All you need is to use any PSR-11 compatible DI container.
- PHP 7.4 or higher.
The package could be installed with composer:
composer require yiisoft/yii-event --prefer-dist
You can see a config example in the config directory:
- common.php contains the configuration for the PSR-14 interfaces.
- console.php and web.php contains the configuration for the
ListenerCollectionFactory
.
All these configs will be used automatically in projects with the yiisoft/config.
The configuration is an array where keys are event names and values are array of handlers:
return [
EventName::class => [
// Just a regular closure, it will be called from the Dispatcher "as is".
static fn (EventName $event) => someStuff($event),
// A regular closure with additional dependency. All the parameters after the first one (the event itself)
// will be resolved from your DI container within `yiisoft/injector`.
static fn (EventName $event, DependencyClass $dependency) => someStuff($event),
// An example with a regular callable. If the `staticMethodName` method contains some dependencies,
// they will be resolved the same way as in the previous example.
[SomeClass::class, 'staticMethodName'],
// Non-static methods are allowed too. In this case `SomeClass` will be instantiated by your DI container.
[SomeClass::class, 'methodName'],
// An object of a class with the `__invoke` method implemented
new InvokableClass(),
// In this case the `InvokableClass` with the `__invoke` method will be instantiated by your DI container
InvokableClass::class,
// Any definition of an invokable class may be here while your `$container->has('the definition)`
'di-alias'
],
];
The dependency resolving is done in a lazy way: dependencies will not be resolved before the corresponding event will happen.
To help you with event listener configuration validation there is the ListenerConfigurationChecker
. It is converting
your whole listener config to actual callables at once to validate it. It is intended to be used in development environment
or in tests since it is a resource greedy operation in large projects. An InvalidEventConfigurationFormatException
will be thrown if your configuration contains an invalid listener.
Usage example:
$checker->check($configuration->get('events-web'));
The package is tested with PHPUnit. To run tests:
./vendor/bin/phpunit
The package tests are checked with Infection mutation framework with Infection Static Analysis Plugin. To run it:
./vendor/bin/roave-infection-static-analysis-plugin
The code is statically analyzed with Psalm. To run static analysis:
./vendor/bin/psalm
The Yii Event is free software. It is released under the terms of the BSD License.
Please see LICENSE
for more information.
Maintained by Yii Software.