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

api-platform / core / 14954769666

11 May 2025 10:14AM UTC coverage: 0.0% (-8.5%) from 8.457%
14954769666

Pull #7135

github

web-flow
Merge bf21e0bc7 into 4dd0cdfc4
Pull Request #7135: fix(symfony,laravel): InvalidUriVariableException status code (e400)

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

11040 existing lines in 370 files now uncovered.

0 of 48303 relevant lines covered (0.0%)

0.0 hits per line

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

0.0
/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
    }
×
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)) {
×
40
            $resourceClasses = array_keys($request->attributes->get('_graphql_args', []));
×
41
        } else {
UNCOV
42
            $cl = $request->attributes->get('_api_resource_class');
×
UNCOV
43
            $resourceClasses = $cl ? [$cl] : [];
×
44
        }
45

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

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

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

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

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

73
    /**
74
     * {@inheritdoc}
75
     */
76
    public function getName(): string
77
    {
UNCOV
78
        return 'api_platform.data_collector.request';
×
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'] ?? [];
×
89
    }
90

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

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

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

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

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

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

UNCOV
130
        return new DataCollected(
×
UNCOV
131
            $resourceClass,
×
UNCOV
132
            $this->cloneVar($resourceMetadataCollectionData),
×
UNCOV
133
            $filters,
×
UNCOV
134
            $counters
×
UNCOV
135
        );
×
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