SymfonyActionRequestHandler::handle()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
nc 1
nop 1
dl 0
loc 7
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Kafkiansky\SymfonyMiddleware\Middleware;
6
7
use Kafkiansky\SymfonyMiddleware\Psr\PsrRequestCloner;
8
use Psr\Http\Message\ResponseInterface;
9
use Psr\Http\Message\ServerRequestInterface;
10
use Psr\Http\Server\RequestHandlerInterface;
11
use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
12
use Symfony\Component\HttpFoundation\Response;
13
use Kafkiansky\SymfonyMiddleware\Psr\PsrResponseTransformer;
14
15
final class SymfonyActionRequestHandler implements RequestHandlerInterface
16
{
17
    /**
18
     * @var callable(SymfonyRequest): Response
19
     */
20
    private $destination;
21
    private PsrResponseTransformer $psrResponseTransformer;
22
    private SymfonyRequest $symfonyRequest;
23
    private PsrRequestCloner $psrRequestCloner;
24
25
    /**
26
     * @param callable(SymfonyRequest): Response $destination
27
     */
28
    public function __construct(
29
        callable $destination,
30
        SymfonyRequest $symfonyRequest,
31
        PsrResponseTransformer $psrResponseTransformer,
32
        PsrRequestCloner $psrRequestCloner,
33
    ) {
34
        $this->destination = $destination;
35
        $this->psrResponseTransformer = $psrResponseTransformer;
36
        $this->symfonyRequest = $symfonyRequest;
37
        $this->psrRequestCloner = $psrRequestCloner;
38
    }
39
40
    public function handle(ServerRequestInterface $request): ResponseInterface
41
    {
42
        $clonedSymfonyRequest = $this->psrRequestCloner->clone($this->symfonyRequest, $request);
43
44
        $response = ($this->destination)($clonedSymfonyRequest);
45
46
        return $this->psrResponseTransformer->toPsrResponse($response);
47
    }
48
}
49