Completed
Push — master ( c550db...59e384 )
by Amrouche
16s queued 11s
created

RequestDataCollector::getRequestAttributes()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
eloc 1
nc 1
nop 0
1
<?php
2
3
/*
4
 * This file is part of the API Platform project.
5
 *
6
 * (c) Kévin Dunglas <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
namespace ApiPlatform\Core\Bridge\Symfony\Bundle\DataCollector;
15
16
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
17
use ApiPlatform\Core\Util\RequestAttributesExtractor;
18
use Symfony\Component\HttpFoundation\Request;
19
use Symfony\Component\HttpFoundation\Response;
20
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
21
22
/**
23
 * @author Julien DENIAU <[email protected]>
24
 */
25
final class RequestDataCollector extends DataCollector
26
{
27
    private $metadataFactory;
28
29
    public function __construct(ResourceMetadataFactoryInterface $metadataFactory)
30
    {
31
        $this->metadataFactory = $metadataFactory;
32
    }
33
34
    /**
35
     * {@inheritdoc}
36
     */
37
    public function collect(Request $request, Response $response, \Exception $exception = null)
38
    {
39
        $resourceClass = $request->attributes->get('_api_resource_class');
40
        $resourceMetadata = $resourceClass ? $this->metadataFactory->create($resourceClass) : null;
41
42
        $this->data = [
43
            'resource_class' => $resourceClass,
44
            'resource_metadata' => $resourceMetadata ? $this->cloneVar($resourceMetadata) : null,
45
            'acceptable_content_types' => $request->getAcceptableContentTypes(),
46
            'request_attributes' => RequestAttributesExtractor::extractAttributes($request),
47
        ];
48
    }
49
50
    public function getAcceptableContentTypes(): array
51
    {
52
        return $this->data['acceptable_content_types'] ?? [];
53
    }
54
55
    public function getResourceClass()
56
    {
57
        return $this->data['resource_class'] ?? null;
58
    }
59
60
    public function getResourceMetadata()
61
    {
62
        return $this->data['resource_metadata'] ?? null;
63
    }
64
65
    public function getRequestAttributes(): array
66
    {
67
        return $this->data['request_attributes'] ?? [];
68
    }
69
70
    /**
71
     * {@inheritdoc}
72
     */
73
    public function getName(): string
74
    {
75
        return 'api_platform.data_collector.request';
76
    }
77
78
    /**
79
     * {@inheritdoc}
80
     */
81
    public function reset()
82
    {
83
        $this->data = [];
84
    }
85
}
86