MiddlewareUseExample.php$0 ➔ __construct()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 4
rs 10
1
<?php
2
3
require __DIR__.'/../vendor/autoload.php';
4
5
use HnrAzevedo\Http\Factory;
6
use HnrAzevedo\Http\Response;
7
use HnrAzevedo\Http\Uri;
8
use HnrAzevedo\Validator\Validator;
9
use Psr\Http\Server\RequestHandlerInterface;
10
use Psr\Http\Message\ServerRequestInterface;
11
use Psr\Http\Message\ResponseInterface;
12
use Psr\Http\Server\MiddlewareInterface;
13
14
try{
15
    $serverRequest = (new Factory())->createServerRequest('GET', new Uri('/'));
16
    $serverRequest = $serverRequest->withAttribute('validator',[
17
        'namespace' => 'HnrAzevedo\\Validator\\Example\\Rules',
18
        'data' => $data,
19
        'lang' => 'pt_br'
20
    ]);
21
22
    class App implements MiddlewareInterface{
23
        public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
24
        {
25
            if(!$request->getAttribute('validator')['valid']){
26
                
27
                $errors = [];
28
29
                foreach($request->getAttribute('validator')['errors'] as $error){
30
                    $errors[] = [
31
                        'input' => array_keys($error)[0],                 // Return name input error
32
                        'message' => array_values($error)[0]            // Return message error
33
                    ];
34
                }
35
        
36
                return new Response(403);
37
            }
38
39
            return $handler->handle($request);
40
        }
41
    }
42
43
    define('GLOBAL_MIDDLEWARES',[
44
        Validator::class,
45
        App::class
46
    ]);
47
48
    function nextExample(RequestHandlerInterface $defaultHandler): RequestHandlerInterface
49
    {
50
        return new class (GLOBAL_MIDDLEWARES, $defaultHandler) implements RequestHandlerInterface {
51
            private RequestHandlerInterface $handler;
52
            private array $pipeline;
53
54
            public function __construct(array $pipeline, RequestHandlerInterface $handler)
55
            {
56
                $this->handler = $handler;
57
                $this->pipeline = $pipeline;
58
            }
59
60
            public function handle(ServerRequestInterface $request): ResponseInterface
61
            {
62
                if (!$middleware = array_shift($this->pipeline)) {
63
                    return $this->handler->handle($request);
64
                }
65
66
                $next = clone $this;
67
                $this->pipeline = [];
68
69
                $response = (new $middleware())->process($request, $next);
70
71
                return $response;
72
            }
73
        };
74
    }
75
76
77
    function runMiddlewares($serverRequest)
78
    {
79
        nextExample(new class implements RequestHandlerInterface{
80
            public function handle(ServerRequestInterface $request): ResponseInterface
81
            {
82
                return (new Factory())->createResponse(200);
83
            }
84
        })->handle($serverRequest);
85
    }
86
87
    runMiddlewares($serverRequest);
88
89
}catch(Exception $er){
90
91
    die("Code Error: {$er->getCode()}<br>Line: {$er->getLine()}<br>File: {$er->getFile()}<br>Message: {$er->getMessage()}.");
92
93
}
94