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 / CommandBus.php
ameliabooking / vendor / league / tactician / src Last commit date
Exception 7 years ago Handler 7 years ago Plugins 7 years ago Setup 7 years ago CommandBus.php 7 years ago Middleware.php 7 years ago
CommandBus.php
69 lines
1 <?php
2
3 namespace League\Tactician;
4
5 use League\Tactician\Exception\InvalidCommandException;
6 use League\Tactician\Exception\InvalidMiddlewareException;
7
8 /**
9 * Receives a command and sends it through a chain of middleware for processing.
10 *
11 * @final
12 */
13 class CommandBus
14 {
15 /**
16 * @var callable
17 */
18 private $middlewareChain;
19
20 /**
21 * @param Middleware[] $middleware
22 */
23 public function __construct(array $middleware)
24 {
25 $this->middlewareChain = $this->createExecutionChain($middleware);
26 }
27
28 /**
29 * Executes the given command and optionally returns a value
30 *
31 * @param object $command
32 *
33 * @return mixed
34 */
35 public function handle($command)
36 {
37 if (!is_object($command)) {
38 throw InvalidCommandException::forUnknownValue($command);
39 }
40
41 $middlewareChain = $this->middlewareChain;
42 return $middlewareChain($command);
43 }
44
45 /**
46 * @param Middleware[] $middlewareList
47 *
48 * @return callable
49 */
50 private function createExecutionChain($middlewareList)
51 {
52 $lastCallable = function () {
53 // the final callable is a no-op
54 };
55
56 while ($middleware = array_pop($middlewareList)) {
57 if (! $middleware instanceof Middleware) {
58 throw InvalidMiddlewareException::forMiddleware($middleware);
59 }
60
61 $lastCallable = function ($command) use ($middleware, $lastCallable) {
62 return $middleware->execute($command, $lastCallable);
63 };
64 }
65
66 return $lastCallable;
67 }
68 }
69