ruiadr / event
Système d'événements simple permettant la communication découplée entre composants.
2.1.3
2025-06-24 11:25 UTC
Requires
- php: >=8.1
Requires (Dev)
- phpunit/php-code-coverage: 10.1.x-dev
- phpunit/phpunit: 10.5.x-dev
README
Système d'événements simple permettant la communication découplée entre composants.
⭐ Utilisation
Créer un événement personnalisé
use Ruiadr\Event\Event;
final class MyEvent extends Event
{
}
Créer un dispatcher personnalisé
use Ruiadr\Event\Dispatcher;
final class MyDispatcher extends Dispatcher
{
final public const ON_SET_DATA_EVENT = 'SET_DATA';
public function setData(array $data): self
{
$this->dispatchEvent(self::ON_SET_DATA_EVENT, new MyEvent($data));
return $this;
}
}
Créer un listener personnalisé
use Ruiadr\Event\Listener;
final class MyListener
{
private ?array $data = null;
public function __construct(private readonly MyDispatcher $dispatcher)
{
$this->dispatcher->addEventListener(MyDispatcher::ON_SET_DATA_EVENT,
function (MyEvent $event) {
$this->data = $event->getData();
}
);
}
public function setData(array $data): self
{
$this->dispatcher->setData($data);
return $this;
}
public function getData(): ?array
{
return $this->data;
}
}
Exemple d'utilisation
$dispatcher = new MyDispatcher();
$listener1 = new MyListener($dispatcher);
$listener2 = new MyListener($dispatcher);
$value = ['key' => 'value'];
$listener1->setData($value);
$listener1->getData(); // Retourne ['key' => 'value']
$listener2->getData(); // Retourne aussi ['key' => 'value']
⭐ Tests
Lancer les tests unitaires :
php vendor/bin/phpunit
Lancer les tests unitaires avec des statistiques de couverture du code :
La commande aura pour effet de générer un fichier coverage.xml qui pourra ensuite être utilisé par SonarCloud, et un répertoire coverage contenant le HTML permettant de consulter le compte rendu depuis son navigateur.
php vendor/bin/phpunit --log-junit=tests.xml --coverage-clover=coverage.xml --coverage-html coverage
xdebug doit être installé et activé. Exemple avec un conteneur Docker :
# /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
zend_extension=xdebug.so
[xdebug]
xdebug.mode=coverage