index.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. require_once __DIR__ . '/../vendor/autoload.php';
  3. use League\Container\ReflectionContainer;
  4. use League\Tactician\Container\ContainerLocator;
  5. use League\Container\Container;
  6. use League\Tactician\Handler\CommandHandlerMiddleware;
  7. use League\Tactician\Handler\CommandNameExtractor\ClassNameExtractor;
  8. use League\Tactician\Handler\MethodNameInflector\HandleClassNameInflector;
  9. use League\Tactician\CommandBus;
  10. $mapping = [
  11. 'MyCommand' => 'MyCommandHandler',
  12. ];
  13. final class Mailer
  14. {
  15. }
  16. final class MyCommand
  17. {
  18. public $name;
  19. public $emailAddress;
  20. public function __construct($name, $emailAddress)
  21. {
  22. $this->name = $name;
  23. $this->emailAddress = $emailAddress;
  24. }
  25. }
  26. final class MyCommandHandler
  27. {
  28. private $mailer;
  29. public function __construct(Mailer $mailer)
  30. {
  31. $this->mailer = $mailer;
  32. }
  33. public function handleMyCommand($command)
  34. {
  35. $format = <<<MSG
  36. Hi %s,
  37. Your email address is %s.
  38. --
  39. Cheers
  40. MSG;
  41. echo sprintf($format, $command->name, $command->emailAddress);
  42. }
  43. }
  44. $containerLocator = new ContainerLocator(
  45. (new Container())->delegate(new ReflectionContainer()),
  46. $mapping
  47. );
  48. $handlerMiddleware = new CommandHandlerMiddleware(
  49. new ClassNameExtractor(),
  50. $containerLocator,
  51. new HandleClassNameInflector()
  52. );
  53. $commandBus = new CommandBus([$handlerMiddleware]);
  54. $command = new MyCommand('Joe Bloggs', 'j.bloggs@theinternet.com');
  55. echo '<pre>';
  56. try {
  57. $commandBus->handle($command);
  58. } catch (\Exception $e) {
  59. echo $e->getMessage();
  60. echo '<pre>';
  61. print_r($e->getTraceAsString());
  62. echo '</pre>';
  63. }