• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

api-platform / core / 15133993414

20 May 2025 09:30AM UTC coverage: 26.313% (-1.2%) from 27.493%
15133993414

Pull #7161

github

web-flow
Merge e2c03d45f into 5459ba375
Pull Request #7161: fix(metadata): infer parameter string type from schema

0 of 2 new or added lines in 1 file covered. (0.0%)

11019 existing lines in 363 files now uncovered.

12898 of 49018 relevant lines covered (26.31%)

34.33 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.24
/src/Symfony/Bundle/DataCollector/RequestDataCollector.php
1
<?php
2

3
/*
4
 * This file is part of the API Platform project.
5
 *
6
 * (c) Kévin Dunglas <dunglas@gmail.com>
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\Symfony\Bundle\DataCollector;
15

16
use ApiPlatform\Metadata\ApiResource;
17
use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
18
use Psr\Container\ContainerInterface;
19
use Symfony\Component\HttpFoundation\Request;
20
use Symfony\Component\HttpFoundation\Response;
21
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
22
use Symfony\Component\VarDumper\Cloner\Data;
23

24
/**
25
 * @author Julien DENIAU <julien.deniau@gmail.com>
26
 * @author Anthony GRASSIOT <antograssiot@free.fr>
27
 */
28
final class RequestDataCollector extends DataCollector
29
{
30
    public function __construct(private readonly ResourceMetadataCollectionFactoryInterface $metadataFactory, private readonly ContainerInterface $filterLocator)
31
    {
UNCOV
32
    }
975✔
33

34
    /**
35
     * {@inheritdoc}
36
     */
37
    public function collect(Request $request, Response $response, ?\Throwable $exception = null): void
38
    {
UNCOV
39
        if ($request->attributes->get('_graphql', false)) {
8✔
40
            $resourceClasses = array_keys($request->attributes->get('_graphql_args', []));
×
41
        } else {
UNCOV
42
            $cl = $request->attributes->get('_api_resource_class');
8✔
UNCOV
43
            $resourceClasses = $cl ? [$cl] : [];
8✔
44
        }
45

UNCOV
46
        $this->data['operation_name'] = $request->attributes->get('_api_operation_name');
8✔
UNCOV
47
        $this->data['acceptable_content_types'] = $request->getAcceptableContentTypes();
8✔
UNCOV
48
        $this->data['resources'] = array_map(fn (string $resourceClass): DataCollected => $this->collectDataByResource($resourceClass), $resourceClasses);
8✔
49

UNCOV
50
        $parameters = [];
8✔
UNCOV
51
        if ($operation = $request->attributes->get('_api_operation')) {
8✔
UNCOV
52
            foreach ($operation->getParameters() ?? [] as $key => $param) {
8✔
UNCOV
53
                $parameters[$key] = $this->cloneVar($param);
2✔
54
            }
55
        }
56

UNCOV
57
        $this->data['parameters'] = $parameters;
8✔
58
    }
59

60
    private function setFilters(ApiResource $resourceMetadata, int $index, array &$filters, array &$counters): void
61
    {
UNCOV
62
        foreach ($resourceMetadata->getFilters() ?? [] as $id) {
4✔
UNCOV
63
            if ($this->filterLocator->has($id)) {
4✔
UNCOV
64
                $filters[$index][$id] = $this->filterLocator->get($id)::class;
3✔
UNCOV
65
                continue;
3✔
66
            }
67

UNCOV
68
            $filters[$index][$id] = null;
2✔
UNCOV
69
            ++$counters['ignored_filters'];
2✔
70
        }
71
    }
72

73
    /**
74
     * {@inheritdoc}
75
     */
76
    public function getName(): string
77
    {
UNCOV
78
        return 'api_platform.data_collector.request';
971✔
79
    }
80

81
    public function getData(): array|Data
82
    {
83
        return $this->data;
×
84
    }
85

86
    public function getAcceptableContentTypes(): array
87
    {
UNCOV
88
        return $this->data['acceptable_content_types'] ?? [];
3✔
89
    }
90

91
    public function getOperationName(): ?string
92
    {
UNCOV
93
        return $this->data['operation_name'] ?? null;
1✔
94
    }
95

96
    public function getParameters(): array
97
    {
UNCOV
98
        return $this->data['parameters'] ?? [];
1✔
99
    }
100

101
    public function getResources(): array
102
    {
UNCOV
103
        return $this->data['resources'] ?? [];
7✔
104
    }
105

106
    /**
107
     * {@inheritdoc}
108
     */
109
    public function reset(): void
110
    {
UNCOV
111
        $this->data = [];
307✔
112
    }
113

114
    private function collectDataByResource(string $resourceClass): DataCollected
115
    {
UNCOV
116
        $resourceMetadataCollection = $resourceClass ? $this->metadataFactory->create($resourceClass) : [];
4✔
UNCOV
117
        $filters = [];
4✔
UNCOV
118
        $counters = ['ignored_filters' => 0];
4✔
UNCOV
119
        $resourceMetadataCollectionData = [];
4✔
120

121
        /** @var ApiResource $resourceMetadata */
UNCOV
122
        foreach ($resourceMetadataCollection as $index => $resourceMetadata) {
4✔
UNCOV
123
            $this->setFilters($resourceMetadata, $index, $filters, $counters);
4✔
UNCOV
124
            $resourceMetadataCollectionData[] = [
4✔
UNCOV
125
                'resource' => $resourceMetadata,
4✔
UNCOV
126
                'operations' => null !== $resourceMetadata->getOperations() ? iterator_to_array($resourceMetadata->getOperations()) : [],
4✔
UNCOV
127
            ];
4✔
128
        }
129

UNCOV
130
        return new DataCollected(
4✔
UNCOV
131
            $resourceClass,
4✔
UNCOV
132
            $this->cloneVar($resourceMetadataCollectionData),
4✔
UNCOV
133
            $filters,
4✔
UNCOV
134
            $counters
4✔
UNCOV
135
        );
4✔
136
    }
137
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc