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

HandlerParametersResolver::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 0
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 2
ccs 1
cts 1
cp 1
crap 1
rs 10
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