1. Go to this page and download the library: Download sasa-b/command-bus 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/ */
sasa-b / command-bus example snippets
$container = new InMemoryContainer($services)
$bus = new \Sco\MessageBus\Bus($container);
$bus->dispatch(new FindPostByIdQuery(1))
use Sco\MessageBus\Bus;
use Sco\MessageBus\Message;
use Sco\MessageBus\Result;
use Psr\Container\ContainerInterface;
use Symfony\Contracts\Service\ServiceSubscriberInterface;
class MessageBus implements ServiceSubscriberInterface
{
private Bus $bus;
public function __construct(ContainerInterface $locator)
{
$this->bus = new Bus($locator, [], null, new UuidV4Identity());
}
public function dispatch(\Sco\MessageBus\Message $message): Result
{
return $this->bus->dispatch($message);
}
public static function getSubscribedServices(): array
{
return [
FindPostByIdHandler::class,
SavePostHandler::class
];
}
}
$this->app->bind(\Sco\MessageBus\Bus::class, function ($app) {
return new \Sco\MessageBus\Bus($app);
});
use Sco\MessageBus\Identity;
class UuidIdentity implements Identity
{
public function generate() : string
{
return Uuid::uuid7()->toString();
}
}
use Sco\MessageBus\Bus;
use Sco\MessageBus\Message;
use Sco\MessageBus\Middleware;
class CustomMiddleware implements Middleware
{
public function __invoke(Message $message,\Closure $next) : mixed
{
// Do something before message handling
$result = $next($message);
// Do something after message handling
return $result;
}
}
$bus = new Bus(middlewares: [new CustomMiddleware()]);
use Sco\MessageBus\Event\Subscriber;
use Sco\MessageBus\Event\MessageReceivedEvent;
$subscriber = new Subscriber();
$subscriber->addListener(MessageReceivedEvent::class, function (MessageReceivedEvent $event) {
$event->getName(); // Name of the Event
$event->getMessage();; // Command or Query that has been received
});
use Sco\MessageBus\Event\Subscriber;
use Sco\MessageBus\Event\MessageHandledEvent;
$subscriber = new Subscriber();
$subscriber->addListener(MessageHandledEvent::class, function (MessageHandledEvent $event) {
$event->getName(); // Name of the Event
$event->getMessage(); // Command or Query being handled
$event->getResult(); // Result for the handled message
});
use Sco\MessageBus\Event\Subscriber;
use Sco\MessageBus\Event\MessageFailedEvent;
$subscriber = new Subscriber();
$subscriber->addListener(MessageFailedEvent::class, function (MessageFailedEvent $event) {
$event->getName(); // Name of the Event
$event->getMessage(); // Command or Query being handled
$event->getError(); // Captured Exception
});