dhii/event-interface

一个用于补充 PSR-14 的事件标准

v0.4.0-alpha1 2021-06-01 18:20 UTC

This package is auto-updated.

Last update: 2024-08-29 04:31:38 UTC


README

Continuous Integration Latest Stable Version Latest Unstable Version

详细信息

PSR-14 标准提供了用于事件分发的接口。但是,对于事件本身呢?如果消费者(即发射器)没有对事件外观达成一致,它们如何与处理器进行交互?此包旨在提供接口,以促进按事件名称识别的事件的互操作性。

用法

基本功能

本质上,事件只是一个与名称相关联的参数映射。

<?php
use Dhii\Events\Event\StoppableEventFactoryInterface;

/* @var $factory StoppableEventFactoryInterface */
$event = $factory->make('my_event', ['key' => 'value']);
echo $event->getName(); // 'my_event'
echo $event->getParam('key'); //  'value'

$params = $event->getParams();
var_dump($params); // ['key' => 'value']

$params['hello'] = 'world';
$event->setParams($params);
echo $event->getParam('hello'); // 'world'
?>

使用 PSR-14

可以使用符合标准的事件分发器分发事件。此示例需要建议的 dhii/event-dispatcher-interface 包。

<?php
use Psr\EventDispatcher\EventDispatcherInterface;
use Dhii\Events\Event\EventInterface;
use Dhii\Events\Event\StoppableEventFactoryInterface;
use Dhii\Events\Listener\AddListenerCapableInterface;

/* @var $dispatcher EventDispatcherInterface */
/* @var $factory StoppableEventFactoryInterface */
/* @var $listenerMap AddListenerCapableInterface */

// First listener will change a value and stop propagation
$listenerMap->addListener('my_event', function (EventInterface $event) {
    $params = $event->getParams();
    $params['key'] = 'other_value';
    $event->setParams($params);
    $event->stopPropagation();
}, 1);

// Second listener is never run, therefore the value does not change again
$listenerMap->addListener('my_event', function (EventInterface $event) {
    $params = $event->getParams();
    $params['key'] = 'yet another value';
    $event->setParams($params);
}, 2);

$event = $factory->make('my_event', ['key' => 'value']);
$dispatcher->dispatch($event);
echo $event->getParam('key'); // 'other_value'
?>