yiisoft / yii-event
Yii Event
Fund package maintenance!
Open Collective
yiisoft
Installs: 183 662
Dependents: 36
Suggesters: 4
Security: 0
Stars: 13
Watchers: 17
Forks: 9
Open Issues: 0
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.18.0
- 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
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 find default configuration in the config directory:
- di.php contains the configuration for the PSR-14 interfaces.
- di-web.php and di-console.php contains the configuration for the
Yiisoft\EventDispatcher\Provider\ListenerCollection
. - params-web.php and params-console.php contains parameters for
web
andconsole
configurations.
All these settings will be used automatically in projects with the yiisoft/config.
If you have custom events
configuration group name, for example events-api
, redefine it in the eventsConfigGroup
params key.
params.php
<?php declare(strict_types=1); return [ 'yiisoft/yii-event' => [ 'eventsConfigGroup' => 'events-api', ], ]
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.