1. Go to this page and download the library: Download sympress/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/ */
sympress / event-dispatcher example snippets
declare(strict_types=1);
use SymPress\EventDispatcher\Application\EventSystem;
use SymPress\EventDispatcher\Contract\EventSubscriberInterface;
use SymPress\EventDispatcher\Event\AbstractFilterEvent;
final readonly class UploadMimesEvent extends AbstractFilterEvent
{
public function __construct(
array $mimes,
public int $userId,
)
{
parent::__construct($mimes, [$mimes, $userId]);
}
public static function hookName(): string
{
return 'upload_mimes';
}
public static function acceptedArgs(): int
{
return 2;
}
public static function fromHookArguments(array $arguments): static
{
return new self(
(array) ($arguments[0] ?? []),
(int) ($arguments[1] ?? 0),
);
}
/**
* @return array<string, string>
*/
public function mimes(): array
{
/** @var array<string, string> $mimes */
$mimes = $this->value();
return $mimes;
}
public function withAllowed(string $extension, string $mimeType): self
{
$mimes = $this->mimes();
$mimes[$extension] = $mimeType;
return new self($mimes, $this->userId);
}
}
final class UploadSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
UploadMimesEvent::class => ['allowSvg', 100],
];
}
public function allowSvg(UploadMimesEvent $event): UploadMimesEvent
{
return $event->withAllowed('svg', 'image/svg+xml');
}
}
add_action(
EventSystem::REGISTER_HOOK,
static function ($dispatcher): void {
$dispatcher->addSubscriber(new UploadSubscriber());
},
);
use SymPress\EventDispatcher\Application\EventSystem;
use SymPress\EventDispatcher\Attribute\AsEventListener;
use SymPress\EventDispatcher\Attribute\AsEventSubscriber;
#[AsEventSubscriber(event: UploadMimesEvent::class, method: 'allowSvg', priority: 100)]
final class UploadListener
{
public function allowSvg(UploadMimesEvent $event): UploadMimesEvent
{
return $event->withAllowed('svg', 'image/svg+xml');
}
#[AsEventListener(priority: 0)]
public function allowWebp(UploadMimesEvent $event): UploadMimesEvent
{
return $event->withAllowed('webp', 'image/webp');
}
}
add_action(
EventSystem::REGISTER_HOOK,
static function ($dispatcher): void {
$dispatcher->register(new UploadListener());
},
);
use SymPress\EventDispatcher\Application\EventSystem;
use SymPress\EventDispatcher\Event\AbstractFilterEvent;
final readonly class UploadMimesEvent extends AbstractFilterEvent
{
/**
* @param array<string, string> $mimes
*/
public function __construct(
array $mimes,
public int $userId,
) {
parent::__construct($mimes, [$mimes, $userId]);
}
public static function hookName(): string
{
return 'upload_mimes';
}
public static function acceptedArgs(): int
{
return 2;
}
public static function fromHookArguments(array $arguments): static
{
return new self(
(array) ($arguments[0] ?? []),
(int) ($arguments[1] ?? 0),
);
}
/**
* @return array<string, string>
*/
public function mimes(): array
{
/** @var array<string, string> $mimes */
$mimes = $this->value();
return $mimes;
}
public function withAllowed(string $extension, string $mimeType): self
{
$mimes = $this->mimes();
$mimes[$extension] = $mimeType;
return new self($mimes, $this->userId);
}
}
add_action(
EventSystem::REGISTER_HOOK,
static function ($dispatcher): void {
$dispatcher->addListener(
UploadMimesEvent::class,
static fn (UploadMimesEvent $event): UploadMimesEvent => $event->withAllowed(
'svg',
'image/svg+xml',
),
100,
);
},
);
use SymPress\EventDispatcher\Application\EventSystem;
use SymPress\EventDispatcher\Event\AbstractActionEvent;
final readonly class SavePostEvent extends AbstractActionEvent
{
public function __construct(
public int $postId,
public bool $update,
) {
parent::__construct([$postId, $update]);
}
public static function hookName(): string
{
return 'save_post';
}
public static function acceptedArgs(): int
{
return 2;
}
public static function fromHookArguments(array $arguments): static
{
return new self(
(int) ($arguments[0] ?? 0),
(bool) ($arguments[1] ?? false),
);
}
}
add_action(
EventSystem::REGISTER_HOOK,
static function ($dispatcher): void {
$dispatcher->addListener(
SavePostEvent::class,
static function (SavePostEvent $event): void {
if (!$event->update) {
return;
}
error_log('Updated post: ' . $event->postId);
},
);
},
);
use SymPress\EventDispatcher\Application\EventSystem;
use SymPress\EventDispatcher\Attribute\AsEventListener;
use SymPress\EventDispatcher\Attribute\AsEventSubscriber;
#[AsEventSubscriber(event: SavePostEvent::class, method: 'onSavePost')]
final class EditorialWorkflowListener
{
public function onSavePost(SavePostEvent $event): void
{
if (!$event->update) {
return;
}
error_log('Editorial workflow for post ' . $event->postId);
}
#[AsEventListener(priority: 100)]
public function allowSvg(UploadMimesEvent $event): UploadMimesEvent
{
return $event->withAllowed('svg', 'image/svg+xml');
}
}
add_action(
EventSystem::REGISTER_HOOK,
static function ($dispatcher): void {
$dispatcher->register(new EditorialWorkflowListener());
},
);
use SymPress\EventDispatcher\Application\EventSystem;
use SymPress\EventDispatcher\Event\AbstractEvent;
final readonly class OrderPaidEvent extends AbstractEvent
{
public function __construct(
public int $orderId,
public string $paymentReference,
) {
}
}
$dispatcher = EventSystem::getInstance()->getDispatcher();
$dispatcher->addListener(
OrderPaidEvent::class,
static function (OrderPaidEvent $event): void {
error_log(
sprintf(
'Order %d paid with reference %s',
$event->orderId,
$event->paymentReference,
),
);
},
);
$dispatcher->dispatch(new OrderPaidEvent(42, 'PAY-123'));
use SymPress\EventDispatcher\Attribute\AsEventListener;
#[AsEventListener(event: OrderPaidEvent::class, priority: 50)]
final class SendInvoiceListener
{
public function __invoke(OrderPaidEvent $event): void
{
error_log('Send invoice for order ' . $event->orderId);
}
}
add_action(
EventSystem::READY_HOOK,
static function ($dispatcher): void {
$dispatcher->register(new SendInvoiceListener());
},
);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.