Passed
Push — master ( 4ca145...e39a6b )
by Jakub
02:24
created

extractAdditionalParams()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
c 0
b 0
f 0
rs 9.4285
cc 2
eloc 6
nc 2
nop 1
1
<?php
2
declare(strict_types=1);
3
4
namespace Eps\Req2CmdBundle\EventListener;
5
6
use Eps\Req2CmdBundle\CommandExtractor\CommandExtractorInterface;
7
use Eps\Req2CmdBundle\Params\ParamCollector\ParamCollectorInterface;
8
use Symfony\Component\HttpFoundation\Request;
9
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
10
11
class ExtractCommandFromRequestListener
12
{
13
    public const API_RESPONDER_CONTROLLER = 'eps.req2cmd.action.api_responder';
14
    public const CMD_CLASS_PARAM = '_command_class';
15
    public const CMD_PARAM = '_command';
16
    public const CMD_PROPS_PARAM = '_command_properties';
17
    private const CONTROLLER_PARAM = '_controller';
18
19
    /**
20
     * @var CommandExtractorInterface
21
     */
22
    private $extractor;
23
24
    /**
25
     * @var ParamCollectorInterface
26
     */
27
    private $paramCollector;
28
29
    public function __construct(CommandExtractorInterface $extractor, ParamCollectorInterface $paramCollector)
30
    {
31
        $this->extractor = $extractor;
32
        $this->paramCollector = $paramCollector;
33
    }
34
35
    public function onKernelRequest(GetResponseEvent $event): void
36
    {
37
        $request = $event->getRequest();
38
        $commandClass = $request->attributes->get(self::CMD_CLASS_PARAM);
39
        if ($commandClass === null) {
40
            return;
41
        }
42
43
        $additionalParams = $this->extractAdditionalParams($request);
44
        $command = $this->extractor->extractFromRequest($request, $commandClass, $additionalParams);
45
46
        $request->attributes->set(self::CMD_PARAM, $command);
47
        $request->attributes->remove(self::CMD_CLASS_PARAM);
48
49
        if (!$request->attributes->has(self::CONTROLLER_PARAM)) {
50
            $request->attributes->set(self::CONTROLLER_PARAM, self::API_RESPONDER_CONTROLLER);
51
        }
52
    }
53
54
    private function extractAdditionalParams(Request $request): array
55
    {
56
        $additionalParams = [];
57
        if ($request->attributes->has(self::CMD_PROPS_PARAM)) {
58
            $additionalProps = $request->attributes->get(self::CMD_PROPS_PARAM);
59
            $additionalParams = $this->paramCollector->collect($request, $additionalProps);
60
        }
61
62
        return $additionalParams;
63
    }
64
}
65