Passed
Pull Request — master (#48)
by Rustam
12:11
created

HandlerParametersResolver   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Test Coverage

Coverage 55%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 20
c 1
b 0
f 0
dl 0
loc 38
ccs 11
cts 20
cp 0.55
rs 10
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 2 1
A resolve() 0 5 1
A getAttributeParams() 0 24 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\RequestModel;
6
7
use Psr\Http\Message\ServerRequestInterface;
8
use Yiisoft\RequestModel\Attribute\HandlerParameterInterface;
9
use Yiisoft\RequestModel\Attribute\RouteParam;
10
use Yiisoft\Router\CurrentRoute;
11
12
class HandlerParametersResolver
13
{
14 12
    public function __construct(private RequestModelFactory $factory, private CurrentRoute $currentRoute)
15
    {
16
    }
17
18 6
    public function resolve(array $parameters, ServerRequestInterface $request): array
19
    {
20 6
        return array_merge(
21 6
            $this->getAttributeParams($parameters, $request),
22 6
            $this->factory->createInstances($request, $parameters)
23
        );
24
    }
25
26 6
    private function getAttributeParams(array $parameters, ServerRequestInterface $request): array
27
    {
28 6
        $actionParams = [];
29 6
        foreach ($parameters as $parameter) {
30 6
            $attributes = $parameter->getAttributes(
31
                HandlerParameterInterface::class,
32
                \ReflectionAttribute::IS_INSTANCEOF
33
            );
34 6
            foreach ($attributes as $attribute) {
35
                /** @var RouteParam $attributeInstance */
36
                $attributeInstance = $attribute->newInstance();
37
38
                $actionParams[$parameter->getName()] = match ($attributeInstance->getType()) {
39
                    HandlerParameterInterface::ROUTE_PARAM => $this
40
                        ->currentRoute
41
                        ->getArgument($attributeInstance->getName()),
42
                    HandlerParameterInterface::REQUEST_BODY => $request->getParsedBody(),
43
                    HandlerParameterInterface::QUERY_PARAM => $request
44
                        ->getQueryParams()[$attributeInstance->getName()] ?? null,
45
                    HandlerParameterInterface::UPLOADED_FILES => $request->getUploadedFiles()
46
                };
47
            }
48
        }
49 6
        return $actionParams;
50
    }
51
}
52