Via Composer
$ composer require spekkionu/tactician-container-selfhandling
If you want to use the container aware commands you will also need to install league/container
use League\Tactician\CommandBus;
use Spekkionu\Tactician\SelfExecuting\SelfExecutionMiddleware;
$commandBus = new CommandBus([
// any other pre-execution middleware
new SelfExecutionMiddleware(),
// other middleware to handle non-self-executing commands
// any other post-execution middleware
]);
Your commands must implement Spekkionu\Tactician\SelfExecuting\SelfExecutingCommand
and have a handle() method.
The handle method must have no parameters.
use Spekkionu\Tactician\SelfExecuting\SelfExecutingCommand;
/**
* Class ExampleSelfExecutingCommand
*/
class ExampleSelfExecutingCommand implements SelfExecutingCommand
{
/**
* @return string
*/
public function handle()
{
// do work here
}
}
$commandBus->handle(new ExampleSelfExecutingCommand());
Container aware commands will have dependencies injected into the handle()
method from league/container
.
use League\Container\Container;
use League\Tactician\CommandBus;
use Spekkionu\Tactician\SelfExecuting\SelfExecutionMiddleware;
// Setup the Container
$container = new Container();
$container->delegate(
new \League\Container\ReflectionContainer
);
$container->add('Logger', function() {
return new Logger();
});
// Setup the command bus
$commandBus = new CommandBus([
// any other pre-execution middleware
new ContainerAwareSelfExecutionMiddleware($container),
// other middleware to handle non-self-executing commands
// any other post-execution middleware
]);
use Spekkionu\Tactician\SelfExecuting\SelfExecutingCommand;
/**
* Class ExampleSelfExecutingCommand
*/
class ExampleSelfExecutingCommand implements SelfExecutingCommand
{
/**
* The logger will be injected automatically
* @return string
*/
public function handle(Logger $logger)
{
$logger->log('log message');
}
}
$commandBus->handle(new ExampleSelfExecutingCommand());
$ composer test
The MIT License (MIT). Please see License File for more information.