anonymous//examples/MiddlewareExample.php$0   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 22
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
dl 0
loc 22
rs 10
c 1
b 0
f 1
wmc 3
1
<?php
2
3
session_start();
4
5
require __DIR__.'/../vendor/autoload.php';
6
require __DIR__.'/Routes/default.php';
7
8
use HnrAzevedo\Http\Factory;
9
use HnrAzevedo\Http\Uri;
10
use Psr\Http\Server\RequestHandlerInterface;
11
use Psr\Http\Message\ServerRequestInterface;
12
use Psr\Http\Message\ResponseInterface;
13
14
use HnrAzevedo\Router\Router;
15
use Psr\Http\Server\MiddlewareInterface;
16
17
try{
18
    $requestMethod = (isset($_REQUEST['REQUEST_METHOD'])) ? $_REQUEST['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD'];
19
20
    $serverRequest = (new Factory())->createServerRequest($requestMethod, new Uri($_SERVER['REQUEST_URI']));
21
22
    class App implements MiddlewareInterface{
23
        public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
24
        {
25
            if(empty($request->getAttribute('route')))
26
            {
27
                throw new Exception('Page not found', 404);
28
            }
29
30
            $request->getAttribute('route')['action']();
31
32
            return (new Factory())->createResponse(200);
33
        }
34
    }
35
36
    define('GLOBAL_MIDDLEWARES',[
37
        Router::class,
38
        App::class
39
    ]);
40
41
    function nextExample(RequestHandlerInterface $defaultHandler): RequestHandlerInterface
42
    {
43
        return new class (GLOBAL_MIDDLEWARES, $defaultHandler) implements RequestHandlerInterface {
44
            private RequestHandlerInterface $handler;
45
            private array $pipeline;
46
47
            public function __construct(array $pipeline, RequestHandlerInterface $handler)
48
            {
49
                $this->handler = $handler;
50
                $this->pipeline = $pipeline;
51
            }
52
53
            public function handle(ServerRequestInterface $request): ResponseInterface
54
            {
55
                if (!$middleware = array_shift($this->pipeline)) {
56
                    return $this->handler->handle($request);
57
                }
58
59
                $next = clone $this;
60
                $this->pipeline = [];
61
62
                $response = (new $middleware())->process($request, $next);
63
64
                return $response;
65
            }
66
        };
67
    }
68
69
70
    function runMiddlewares($serverRequest)
71
    {
72
        nextExample(new class implements RequestHandlerInterface{
73
            public function handle(ServerRequestInterface $request): ResponseInterface
74
            {
75
                return (new Factory())->createResponse(200);
76
            }
77
        })->handle($serverRequest);
78
    }
79
80
    runMiddlewares($serverRequest);
81
82
}catch(Exception $er){
83
84
    die("Code Error: {$er->getCode()}<br>Line: {$er->getLine()}<br>File: {$er->getFile()}<br>Message: {$er->getMessage()}.");
85
86
}
87