Completed
Push — master ( 890f06...055691 )
by Siim
10:16
created

AbstractResponse::createJsonResponse()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 3
dl 0
loc 5
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: 9:19
7
 */
8
9
namespace Sf4\Api\Response;
10
11
use Sf4\Api\Dto\DtoInterface;
12
use Sf4\Api\Dto\DtoTrait;
13
use Sf4\Api\Dto\EmptyDto;
14
use Sf4\Api\Repository\AbstractRepository;
15
use Sf4\Api\Request\RequestTrait;
16
use Symfony\Component\HttpFoundation\JsonResponse;
17
18
abstract class AbstractResponse implements ResponseInterface
19
{
20
21
    use DtoTrait;
22
    use RequestTrait;
23
24
    /** @var DtoInterface $responseDto */
25
    protected $responseDto;
26
27
    /** @var int $responseStatus */
28
    protected $responseStatus;
29
30
    /** @var array $responseHeaders */
31
    protected $responseHeaders;
32
33
    public function __construct()
34
    {
35
        $this->createJsonResponse(new EmptyDto(), 200, static::HEADERS);
36
    }
37
38
    /**
39
     * @param DtoInterface $data
40
     * @param int $status
41
     * @param array $headers
42
     */
43
    protected function createJsonResponse(DtoInterface $data, int $status = 200, array $headers = self::HEADERS)
44
    {
45
        $this->setResponseDto($data);
46
        $this->setResponseStatus($status);
47
        $this->setResponseHeaders($headers);
48
    }
49
50
    public abstract function init();
51
52
    /**
53
     * @return JsonResponse
54
     */
55
    public function getJsonResponse(): JsonResponse
56
    {
57
        $response = new JsonResponse(
58
            $this->getResponseDto(),
59
            $this->getResponseStatus(),
60
            $this->getResponseHeaders()
61
        );
62
        $request = $this->getRequest()->getRequest();
63
        $response->headers->set(
64
            'Access-Control-Allow-Origin',
65
            $request->headers->get('Origin')
66
        );
67
        return $response;
68
    }
69
70
    /**
71
     * @return DtoInterface
72
     */
73
    public function getResponseDto(): DtoInterface
74
    {
75
        return $this->responseDto;
76
    }
77
78
    /**
79
     * @param DtoInterface $responseDto
80
     */
81
    public function setResponseDto(DtoInterface $responseDto): void
82
    {
83
        $this->responseDto = $responseDto;
84
    }
85
86
    /**
87
     * @return int
88
     */
89
    public function getResponseStatus(): int
90
    {
91
        return $this->responseStatus;
92
    }
93
94
    /**
95
     * @param int $responseStatus
96
     */
97
    public function setResponseStatus($responseStatus): void
98
    {
99
        $this->responseStatus = $responseStatus;
100
    }
101
102
    /**
103
     * @return array
104
     */
105
    public function getResponseHeaders(): array
106
    {
107
        return $this->responseHeaders;
108
    }
109
110
    /**
111
     * @param array $responseHeaders
112
     */
113
    public function setResponseHeaders(array $responseHeaders): void
114
    {
115
        $this->responseHeaders = $responseHeaders;
116
    }
117
118
    /**
119
     * @param string $entityClass
120
     * @return AbstractRepository|null
121
     */
122
    public function getRepository(string $entityClass): ?AbstractRepository
123
    {
124
        $request = $this->getRequest();
125
        if(!$request) {
126
            return null;
127
        }
128
        $requestHandler = $request->getRequestHandler();
129
        $manager = $requestHandler->getEntityManager();
130
131
        $repository = $manager->getRepository($entityClass);
132
        if($repository instanceof AbstractRepository) {
133
            return $repository;
134
        }
135
136
        return null;
137
    }
138
}
139