コード例 #1
0
 /**
  * @test
  * @expectedException \HelloFresh\Engine\CommandBus\Exception\CanNotInvokeHandlerException
  */
 public function itFailsWhenHandlerHasAnInvalidHandleMethod()
 {
     $handler = new InvalidHandler();
     $this->locator->addHandler($handler, TestCommand::class);
     $command = new TestCommand("hey");
     $this->commandBus->execute($command);
 }
 public function register(Application $app)
 {
     $app['event_store'] = $app->share(function ($app) {
         return new RedisEventStore($app['predis']);
     });
     $app['user_repo'] = $app->share(function ($app) {
         return new UserReadRepo($app['user_repo.file']);
     });
     $app['user_write_repo'] = $app->share(function ($app) {
         return new UserWriteRepo($app['event_store'], $app['event_bus']);
     });
     $app['command_bus'] = $app->share(function ($app) {
         $locator = new InMemoryLocator();
         $locator->addHandler(new RegisterHandler($app['user_repo'], $app['password_encoder']), RegisterCommand::class);
         $locator->addHandler(new LoginHandler(), LoginCommand::class);
         // Middleware is Tactician's plugin system. Even finding the handler and
         // executing it is a plugin that we're configuring here.
         $handlerMiddleware = new \League\Tactician\Handler\CommandHandlerMiddleware(new ClassNameExtractor(), $locator, new InvokeInflector());
         return new \League\Tactician\CommandBus([$handlerMiddleware]);
     });
     $app['event_bus'] = $app->share(function ($app) {
     });
     $app['password_encoder'] = $app->share(function ($app) {
         return new UppercasePasswordEncoder();
     });
     $app['event_handler.user_login'] = $app->share(function ($app) {
         return new UserLogin($app['user_repo'], $app['password_encoder']);
     });
     $app['event_handler.register_user'] = $app->share(function ($app) {
         return new RegisterUser($app['user_write_repo'], $app['password_encoder']);
     });
 }
コード例 #3
0
ファイル: example.php プロジェクト: potfur/journal
use League\Tactician\CommandBus;
use League\Tactician\Handler\CommandHandlerMiddleware;
use League\Tactician\Handler\CommandNameExtractor\ClassNameExtractor;
use League\Tactician\Handler\Locator\InMemoryLocator;
use League\Tactician\Handler\MethodNameInflector\HandleInflector;
use League\Tactician\Plugins\LockingMiddleware;
use Symfony\Component\EventDispatcher\EventDispatcher;
error_reporting(E_ALL);
require __DIR__ . '/../vendor/autoload.php';
$persistence = new InMemory();
$eventStore = new EventStore($persistence);
$dispatcher = new EventDispatcher();
$eventEmitter = new DispatcherEmitter($dispatcher);
$unitOfWork = new UnitOfWork($eventStore, $eventEmitter);
$accounting = new Accounting($unitOfWork);
$locator = new InMemoryLocator();
$bus = new CommandBus([new LockingMiddleware(), new CommandHandlerMiddleware(new ClassNameExtractor(), $locator, new HandleInflector())]);
$locator->addHandler(new OpenAccountHandler($accounting), OpenAccountCommand::class);
$locator->addHandler(new DepositHandler($accounting), DepositCommand::class);
$locator->addHandler(new WithdrawHandler($accounting), WithdrawCommand::class);
$locator->addHandler(new TransferHandler($accounting), TransferCommand::class);
$locator->addHandler(new TransferDepositHandler($accounting), TransferDepositCommand::class);
$locator->addHandler(new TransferWithdrawHandler($accounting), TransferWithdrawCommand::class);
$accountHistory = new AccountHistoryProjector();
$accountBalance = new AccountBalanceProjector();
$transferManager = new TransferManager($bus);
$dispatcher->addSubscriber($accountHistory);
$dispatcher->addSubscriber($accountBalance);
$dispatcher->addSubscriber($transferManager);
/*
 * Normal event propagation
コード例 #4
0
<?php

require __DIR__ . '/../vendor/autoload.php';
// The basic code from example 1 that we reuse in future examples.
use League\Tactician\Handler\Locator\InMemoryLocator;
use League\Tactician\Handler\CommandNameExtractor\ClassNameExtractor;
use League\Tactician\Handler\MethodNameInflector\HandleClassNameInflector;
class RegisterUserCommand
{
    public $emailAddress;
    public $password;
}
class RegisterUserHandler
{
    public function handleRegisterUserCommand(RegisterUserCommand $command)
    {
        // Do your core application logic here. Don't actually echo things. :)
        echo "User {$command->emailAddress} was registered!\n";
    }
}
$locator = new InMemoryLocator();
$locator->addHandler(new RegisterUserHandler(), RegisterUserCommand::class);
$handlerMiddleware = new League\Tactician\Handler\CommandHandlerMiddleware(new ClassNameExtractor(), $locator, new HandleClassNameInflector());
$commandBus = new \League\Tactician\CommandBus([$handlerMiddleware]);
コード例 #5
0
 /**
  * @expectedException \League\Tactician\Exception\MissingHandlerException
  */
 public function testHandlerMissing()
 {
     $this->inMemoryLocator->getHandlerForCommand('League\\Tactician\\Tests\\Fixtures\\Command\\CompleteTaskCommand');
 }
コード例 #6
0
 /**
  * @expectedException \League\Tactician\Exception\MissingHandlerException
  */
 public function testHandlerMissing()
 {
     $this->inMemoryLocator->getHandlerForCommand(CompleteTaskCommand::class);
 }
コード例 #7
0
ファイル: app.php プロジェクト: jeroengerits/playing_around
$app['debug'] = true;
/*
 * Services
 */
$app[EntityManager::class] = $app->share(function () use($app) {
    $paths = ['./src/WebEngineers/Account'];
    $isDevMode = false;
    $dbParams = ['driver' => 'pdo_mysql', 'user' => 'root', 'password' => '', 'dbname' => 'finance'];
    $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
    return EntityManager::create($dbParams, $config);
});
$app[Emitter::class] = $app->share(function () use($app) {
    return new Emitter();
});
$app[CommandBus::class] = $app->share(function () use($app) {
    return new CommandBus([$app[CommandHandlerMiddleware::class]]);
});
$app[CommandHandlerMiddleware::class] = $app->share(function () use($app) {
    $locator = new InMemoryLocator();
    $locator->addHandler(new HandleRegisterAccount($app[EntityManager::class], $app[Emitter::class]), RegisterAccount::class);
    return new CommandHandlerMiddleware(new ClassNameExtractor(), $locator, new HandleClassNameInflector());
});
/*
 * Routes
 */
$app->get('/', function () use($app) {
    $command = new RegisterAccount('*****@*****.**', 'Zwaluw01');
    $app[CommandBus::class]->handle($command);
    return new Response();
});
return $app;