1. Go to this page and download the library: Download ignislabs/flare-cqrs 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/ */
ignislabs / flare-cqrs example snippets
// Instantiate the resolver:
// This will get you a new instance of the hander based on the _handler id_,
// i.e, the fully-qualified class name, or wharever identifier you might use in
// a framework container.
// By default FlareCQRS comes with two resolvers, a CallableResolver and a PSR11Resolver.
// You can always create your own resolver by implementing the `Resolver` contract.
// Generic callable resolver
$resolver = new \IgnisLabs\FlareCQRS\Handler\Resolver\CallableResolver(function($handlerId) {
// Somehow resolve your handler handler:
return new performMagicToGetHandlerInstance($handlerId);
});
// PSR11 resolver (assuming Laravel's `$app` container, since it's PSR-11 compliant)
$resolver = new \IgnisLabs\FlareCQRS\Handler\Resolver\PSR11Resolver($app);
// Now instantiate the buses passing them a Locator instance
$queryBus = new \IgnisLabs\FlareCQRS\QueryBus(
// Tell the Locator which handler corresponds to which query
// and how to instantiate the handlers (passing in the Resolver)
new \IgnisLabs\FlareCQRS\Handler\Locator\MapLocator($resolver, [
GetAllTasksQuery::class => GetAllTasksHandler::class
])
);
$commandBus = new \IgnisLabs\FlareCQRS\CommandBus(
// Tell the Locator which handler corresponds to which command
// and how to instantiate the handlers (passing in the Resolver)
new \IgnisLabs\FlareCQRS\Handler\Locator\MapLocator($resolver, [
AddTaskCommand::class => AddTaskHandler::class
])
);
// Queries can return whatever you need, it will be encapsulated in a Result object
$result = $queryBus->dispatch(new GetAllTasksQuery('some', 'params'));
// You can call `$result->call`:
$result->call(function(TaskCollection $tasks) {
// Do what you want with your results
// Using `call` let's you use type-hinting
// It can be a any `callable`, not just a closure
});
// Or just get the result right away:
$result->getResult();
// Commands do not return anything
$commandBus->dispatch(new AddTaskCommand('Task Title', 'The task description'));
// You can dispatch multiple commands in sequence with a single call
$commandBus->dispatch(
new AddTaskCommand('Task Title', 'The task description'),
new UpdateTaskCommand('NEW Task Title', 'The NEW task description')
);
// Or if you like splat!
$commandBus->dispatch(...$commandsArray);
class MyMessage {
use \IgnisLabs\FlareCQRS\Message\DataAccessorTrait;
public function __construct(string $foo, int $bar) {
$this->setData(compact('foo', 'bar'));
}
}
$message = new MyMessage('baz', 'qux');
// Using generic `get` accessor:
$message->get('foo'); // returns 'baz'
// Using the magic accessor:
$message->bar; // returns 'qux'
class MyMessageHandler {
public function __invoke(MyMessage $command) {
// do something here
}
}
$callableMiddleware = function() { /* ... */ };
$queryBus = new \IgnisLabs\FlareCQRS\QueryBus(
$locator, new LoggingMiddleware($logger), new FooMiddleware, $callableMiddleware
);
// Add a middleware to the chain
$commandBus->addMiddleware(new LoggingMiddleware($logger));
// Completely replace the middleware chain
$commandBus->middlewares(new LoggingMiddleware($logger), new FooMiddleware);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.