1. Go to this page and download the library: Download jasny/event-dispatcher library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jasny / event-dispatcher example snippets
namespace App\Event;
/**
* Base class for all events in this application.
*/
abstract class Base
{
/** @var object */
protected $emitter;
/** @var mixed */
protected $payload;
public function __construct(object $emitter, $payload = null)
{
$this->emitter = $emitter;
$this->payload = $payload;
}
final public function getEmitter(): object
{
return $this->emitter;
}
public function setPayload($payload): void
{
$this->payload = $payload;
}
public function getPayload()
{
return $this->payload;
}
}
/**
* Called before an entity is saved to the database.
*/
class BeforeSave extends Base
{}
/**
* Called when an entity is casted to json.
*/
class ToJson extends Base
{}
use App\Event;
use Jasny\EventDispatcher\EventDispatcher;
use Jasny\EventDispatcher\ListenerProvider;
$listener = (new ListenerProvider)
->withListener(function(Event\BeforeSave $event): void {
$entity = $event->getEmitter();
$payload = $event->getPayload();
$payload['bio'] = $payload['bio'] ?? ($entity->name . " just arrived");
$event->setPayload($payload);
})
->withListener(function(Event\ToJson $event): void {
$payload = $event->getPayload();
unset($payload['password']);
$event->setPayload($payload);
});
$dispatcher = new EventDispatcher($listener);
use App\Event;
use Jasny\EventDispatcher\EventDispatcher;
class Foo implements JsonSerializable
{
/**
* @var EventDispatcher
*/
protected $eventDispatcher;
// ...
public function jsonSerialize()
{
$payload = get_object_vars($this);
return $this->eventDispatcher->dispatch(new Event\ToJson($this, $payload));
}
}
namespace App\Event;
use Psr\EventDispatcher\StoppableEventInterface;
/**
* Called before an entity is saved to the database.
*/
class BeforeSave implememnts StoppableEventInterface
{
// ...
public function stopPropagation(): void
{
$this->propagationStopped = true;
}
public function isPropagationStopped(): bool
{
return $this->propagationStopped;
}
}
use App\Event;
use Jasny\EventDispatcher\EventDispatcher;
use Jasny\EventDispatcher\ListenerProvider;
$listener = (new ListenerProvider)
->on(function(Event\BeforeSave $event): void {
$entity = $event->getEmitter();
if (!$entity->isReady()) {
$event->stopPropagation();
}
});
$dispatcher = new EventDispatcher($listener);
use App\Event;
use Jasny\EventDispatcher\EventDispatcher;
use Jasny\EventDispatcher\ListenerProvider;
$listener = (new ListenerProvider)
->withListenerInNs('censor', function(Event\BeforeSave $event): void {
$payload = $event->getPayload();
$payload['bio'] = strtr($payload['bio'], $payload['email'], '***@***.***');
$event->setPayload($payload);
});
->withListenerInNs('censor.json', function(Event $event): void {
$payload = $event->getPayload();
unset($payload['password']);
$event->setPayload($payload);
});