PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.6
Booking for Appointments and Events Calendar – Amelia v2.4.6
2.4.7 2.4.6 2.4.5 2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / vendor / league / tactician / src / Handler / CommandHandlerMiddleware.php
ameliabooking / vendor / league / tactician / src / Handler Last commit date
CommandNameExtractor 7 years ago Locator 7 years ago MethodNameInflector 7 years ago CommandHandlerMiddleware.php 7 years ago
CommandHandlerMiddleware.php
74 lines
1 <?php
2
3 namespace League\Tactician\Handler;
4
5 use League\Tactician\Middleware;
6 use League\Tactician\Exception\CanNotInvokeHandlerException;
7 use League\Tactician\Handler\CommandNameExtractor\CommandNameExtractor;
8 use League\Tactician\Handler\Locator\HandlerLocator;
9 use League\Tactician\Handler\MethodNameInflector\MethodNameInflector;
10
11 /**
12 * The "core" CommandBus. Locates the appropriate handler and executes command.
13 */
14 class CommandHandlerMiddleware implements Middleware
15 {
16 /**
17 * @var CommandNameExtractor
18 */
19 private $commandNameExtractor;
20
21 /**
22 * @var HandlerLocator
23 */
24 private $handlerLocator;
25
26 /**
27 * @var MethodNameInflector
28 */
29 private $methodNameInflector;
30
31 /**
32 * @param CommandNameExtractor $commandNameExtractor
33 * @param HandlerLocator $handlerLocator
34 * @param MethodNameInflector $methodNameInflector
35 */
36 public function __construct(
37 CommandNameExtractor $commandNameExtractor,
38 HandlerLocator $handlerLocator,
39 MethodNameInflector $methodNameInflector
40 ) {
41 $this->commandNameExtractor = $commandNameExtractor;
42 $this->handlerLocator = $handlerLocator;
43 $this->methodNameInflector = $methodNameInflector;
44 }
45
46 /**
47 * Executes a command and optionally returns a value
48 *
49 * @param object $command
50 * @param callable $next
51 *
52 * @return mixed
53 *
54 * @throws CanNotInvokeHandlerException
55 */
56 public function execute($command, callable $next)
57 {
58 $commandName = $this->commandNameExtractor->extract($command);
59 $handler = $this->handlerLocator->getHandlerForCommand($commandName);
60 $methodName = $this->methodNameInflector->inflect($command, $handler);
61
62 // is_callable is used here instead of method_exists, as method_exists
63 // will fail when given a handler that relies on __call.
64 if (!is_callable([$handler, $methodName])) {
65 throw CanNotInvokeHandlerException::forCommand(
66 $command,
67 "Method '{$methodName}' does not exist on handler"
68 );
69 }
70
71 return $handler->{$methodName}($command);
72 }
73 }
74