Completed
Push — master ( 4e747b...f8cb93 )
by Siim
14:03
created

AbstractRequest::getRoute()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: siim
5
 * Date: 17.01.19
6
 * Time: 8:03
7
 */
8
9
namespace Sf4\Api\Request;
10
11
use Sf4\Api\Dto\DtoInterface;
12
use Sf4\Api\Dto\Traits\DtoTrait;
13
use Sf4\Api\RequestHandler\RequestHandlerTrait;
14
use Sf4\Api\Response\ResponseInterface;
15
use Sf4\Api\Response\ResponseTrait;
16
use Symfony\Component\HttpFoundation\Request;
17
18
abstract class AbstractRequest implements RequestInterface
19
{
20
21
    use ResponseTrait;
22
    use DtoTrait;
23
    use RequestHandlerTrait;
24
25
    /** @var Request|null $request */
26
    protected $request;
27
28
    /**
29
     * AbstractRequest constructor.
30
     * @param ResponseInterface $response
31
     * @param DtoInterface $dto
32
     */
33
    public function init(ResponseInterface $response, DtoInterface $dto = null)
34
    {
35
        $response->setRequest($this);
36
        $this->setResponse($response);
37
        if ($dto) {
38
            $this->setDto($dto);
39
            $this->attachDtoToResponse();
40
        }
41
    }
42
43
    protected function attachDtoToResponse()
44
    {
45
        $response = $this->getResponse();
46
        $dto = $this->getDto();
47
        if ($response !== null && $response->getDto() === null && $dto !== null) {
48
            $response->setDto($dto);
49
        }
50
    }
51
52
    /**
53
     * @param Request $request
54
     * @throws \ReflectionException
55
     */
56
    public function handle(Request $request)
57
    {
58
        $this->setRequest($request);
59
        $requestContent = $request->getContent();
60
        if ($requestContent) {
61
            $data = json_decode($requestContent);
62
            if ($data && is_object($data)) {
63
                $data = json_decode(json_encode($data), true);
64
            }
65
            if (is_array($data)) {
66
                $this->getDto()->populate($data);
67
            }
68
        }
69
        $this->getResponse()->init();
70
    }
71
72
    /**
73
     * @return Request|null
74
     */
75
    public function getRequest(): ?Request
76
    {
77
        return $this->request;
78
    }
79
80
    /**
81
     * @param Request|null $request
82
     */
83
    public function setRequest(?Request $request): void
84
    {
85
        $this->request = $request;
86
    }
87
88
    /**
89
     * @return string
90
     */
91
    public function getRoute(): string
92
    {
93
        return static::ROUTE;
94
    }
95
}
96