require __DIR__ . '/../vendor/autoload.php'; use League\Tactician\Handler\Locator\InMemoryLocator; use League\Tactician\Handler\CommandNameExtractor\ClassNameExtractor; use League\Tactician\Handler\MethodNameInflector\HandleClassNameInflector; // Our example Command and Handler. /////////////////////////////////////////// class RegisterUserCommand { public $emailAddress; public $password; } class RegisterUserHandler { public function handleRegisterUserCommand(RegisterUserCommand $command) { // Do your core application logic here. Don't actually echo stuff. :) echo "User {$command->emailAddress} was registered!\n"; } } // Setup the bus, normally in your DI container /////////////////////////////// $locator = new InMemoryLocator(); $locator->addHandler(new RegisterUserHandler(), RegisterUserCommand::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 HandleClassNameInflector()); $commandBus = new \League\Tactician\CommandBus([$handlerMiddleware]); // Controller Code //////////////////////////////////////////////////////////// $command = new RegisterUserCommand(); $command->emailAddress = '*****@*****.**'; $command->password = '******'; $commandBus->handle($command);
<?php require __DIR__ . '/../vendor/autoload.php'; // Setup Queue $redis = new Redis(); $redis->connect('localhost'); $driver = new \Equip\Queue\Driver\RedisDriver($redis); $queue = new \Equip\Queue\Queue($driver); $queue_middleware = new \Equip\Queue\QueueMiddleware($queue, ['test' => [\Example\ExampleCommand::class]]); // Setup Tactician $locator = new \League\Tactician\Handler\Locator\InMemoryLocator([\Example\ExampleCommand::class => new \Example\ExampleHandler()]); $handler_middleware = new \League\Tactician\Handler\CommandHandlerMiddleware(new \League\Tactician\Handler\CommandNameExtractor\ClassNameExtractor(), $locator, new \League\Tactician\Handler\MethodNameInflector\HandleInflector()); $bus = new \League\Tactician\CommandBus([$queue_middleware, $handler_middleware]); // Setup worker $worker = new \Equip\Queue\Worker($driver, $queue, new \Equip\Queue\Event(new \League\Event\Emitter(), new \Monolog\Logger('queue')), $bus); if ($argv[1] == 'produce') { $bus->handle(new \Example\ExampleCommand()); } else { $worker->consume('test'); }