Failed Conditions
Push — master ( aeb658...148ac2 )
by Atanas
02:44 queued 44s
created

src/Middleware/ExecutesMiddlewareTrait.php (1 issue)

1
<?php
2
/**
3
 * @package   WPEmerge
4
 * @author    Atanas Angelov <[email protected]>
5
 * @copyright 2017-2019 Atanas Angelov
6
 * @license   https://www.gnu.org/licenses/gpl-2.0.html GPL-2.0
7
 * @link      https://wpemerge.com/
8
 */
9
10
namespace WPEmerge\Middleware;
11
12
use Closure;
13
use Psr\Http\Message\ResponseInterface;
14
use WPEmerge\Requests\RequestInterface;
15
16
/**
17
 * Executes middleware.
18
 */
19
trait ExecutesMiddlewareTrait {
20
	/**
21
	 * Make a middleware class instance.
22
	 *
23
	 * @param  string $class
24
	 * @return object
25
	 */
26
	protected abstract function makeMiddleware( $class );
0 ignored issues
show
The abstract declaration must precede the visibility declaration
Loading history...
27
28
	/**
29
	 * Execute an array of middleware recursively (last in, first out).
30
	 *
31
	 * @param  string[][]        $middleware
32
	 * @param  RequestInterface  $request
33
	 * @param  Closure           $next
34
	 * @return ResponseInterface
35
	 */
36 3
	protected function executeMiddleware( $middleware, RequestInterface $request, Closure $next ) {
37 3
		$top_middleware = array_shift( $middleware );
38
39 3
		if ( $top_middleware === null ) {
40 3
			return $next( $request );
41
		}
42
43
		$top_middleware_next = function ( $request ) use ( $middleware, $next ) {
44 2
			return $this->executeMiddleware( $middleware, $request, $next );
45 2
		};
46
47 2
		$instance = $this->makeMiddleware( $top_middleware[0] );
48 2
		$arguments = array_merge(
49 2
			[$request, $top_middleware_next],
50 2
			array_slice( $top_middleware, 1 )
51
		);
52
53 2
		return call_user_func_array( [$instance, 'handle'], $arguments );
54
	}
55
}
56