PluginProbe
Depicter — Popup & Slider Builder / 1.2.0
Depicter — Popup & Slider Builder v1.2.0
4.8.1 trunk 1.0.0 1.1.0 1.1.2 1.1.4 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.5 1.3.8 1.5.0 1.5.1 1.5.2 1.5.5 1.6.0 1.6.1 1.6.2 1.7.0 All 76 releases
depicter / vendor / htmlburger / wpemerge / src / Middleware / ExecutesMiddlewareTrait.php

ExecutesMiddlewareTrait.php in Depicter — Popup & Slider Builder 1.2.0, at vendor/htmlburger/wpemerge/src/Middleware/ExecutesMiddlewareTrait.php

56 lines 1.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package WPEmerge
4 * @author Atanas Angelov <hi@atanas.dev>
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 abstract protected function makeMiddleware( $class );
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 protected function executeMiddleware( $middleware, RequestInterface $request, Closure $next ) {
37 $top_middleware = array_shift( $middleware );
38
39 if ( $top_middleware === null ) {
40 return $next( $request );
41 }
42
43 $top_middleware_next = function ( $request ) use ( $middleware, $next ) {
44 return $this->executeMiddleware( $middleware, $request, $next );
45 };
46
47 $instance = $this->makeMiddleware( $top_middleware[0] );
48 $arguments = array_merge(
49 [$request, $top_middleware_next],
50 array_slice( $top_middleware, 1 )
51 );
52
53 return call_user_func_array( [$instance, 'handle'], $arguments );
54 }
55 }
56