Handler::handle()   A
last analyzed

Complexity

Conditions 4
Paths 3

Size

Total Lines 17
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 4
eloc 7
c 3
b 0
f 0
nc 3
nop 1
dl 0
loc 17
rs 10
1
<?php
2
3
/**
4
 * Phoole (PHP7.2+)
5
 *
6
 * @category  Library
7
 * @package   Phoole\Middleware
8
 * @copyright Copyright (c) 2019 Hong Zhang
9
 */
10
declare(strict_types=1);
11
12
namespace Phoole\Middleware;
13
14
use Psr\Http\Message\ResponseInterface;
15
use Psr\Http\Server\MiddlewareInterface;
16
use Psr\Http\Server\RequestHandlerInterface;
17
use Psr\Http\Message\ServerRequestInterface;
18
19
/**
20
 * Handler
21
 * wrapper for middleware/callable/handler
22
 *
23
 * @package Phoole\Middleware
24
 */
25
class Handler implements RequestHandlerInterface
26
{
27
    /**
28
     * @var MiddlewareInterface|callable
29
     */
30
    private $middleware;
31
32
    /**
33
     * @var RequestHandlerInterface|callable
34
     */
35
    private $handler;
36
37
    /**
38
     * @param  RequestHandlerInterface|callable $handler
39
     * @param  MiddlewareInterface|callable     $middleware
40
     */
41
    public function __construct($handler, $middleware = NULL)
42
    {
43
        $this->handler = $handler;
44
        $this->middleware = $middleware;
45
    }
46
47
    /**
48
     * {@inheritDoc}
49
     */
50
    public function handle(ServerRequestInterface $request): ResponseInterface
51
    {
52
        // nulled middleware
53
        if (is_null($this->middleware)) {
54
            return ($this->handler)($request);
55
        }
56
57
        // middleware interface
58
        if (
59
            $this->middleware instanceof MiddlewareInterface &&
60
            $this->handler instanceof RequestHandlerInterface
61
        ) {
62
            return $this->middleware->process($request, $this->handler);
63
        }
64
65
        // callable middleware
66
        return ($this->middleware)($request, $this->handler);
67
    }
68
}