yiisoft / yii-event
Yii Event
Fund package maintenance!
Open Collective
yiisoft
Installs: 141 970
Dependents: 38
Suggesters: 2
Security: 0
Stars: 12
Watchers: 16
Forks: 10
Open Issues: 1
Requires
- php: ^8.0
- psr/container: ^1.0|^2.0
- yiisoft/event-dispatcher: ^1.0
- yiisoft/friendly-exception: ^1.0
- yiisoft/injector: ^1.0
Requires (Dev)
- maglnet/composer-require-checker: ^4.4
- phpunit/phpunit: ^9.5
- rector/rector: ^0.15.13
- roave/infection-static-analysis-plugin: ^1.16
- spatie/phpunit-watcher: ^1.23
- vimeo/psalm: ^4.30|^5.6
- yiisoft/config: ^1.3
- yiisoft/di: ^1.2
- yiisoft/test-support: ^1.3
This package is auto-updated.
Last update: 2023-03-24 07:40:32 UTC
README
Yii Event
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.
Requirements
- PHP 8.0 or higher.
Installation
The package could be installed with composer:
composer require yiisoft/yii-event
General usage
DI configuration
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.
Event configuration example
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.
Configuration checker
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'));
Testing
Unit testing
The package is tested with PHPUnit. To run tests:
./vendor/bin/phpunit
Mutation testing
The package tests are checked with Infection mutation framework with Infection Static Analysis Plugin. To run it:
./vendor/bin/roave-infection-static-analysis-plugin
Static analysis
The code is statically analyzed with Psalm. To run static analysis:
./vendor/bin/psalm
License
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.