Completed
Push — master ( 62ffea...ad14ac )
by
unknown
03:12
created

ChainCollectionDataProvider::getCollection()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 18
rs 8.8571
c 0
b 0
f 0
cc 5
eloc 11
nc 5
nop 2
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\DataProvider;
15
16
use ApiPlatform\Core\Exception\ResourceClassNotSupportedException;
17
18
/**
19
 * Tries each configured data provider and returns the result of the first able to handle the resource class.
20
 *
21
 * @author Kévin Dunglas <[email protected]>
22
 */
23
final class ChainCollectionDataProvider implements CollectionDataProviderInterface
24
{
25
    private $dataProviders;
26
27
    /**
28
     * @param CollectionDataProviderInterface[] $dataProviders
29
     */
30
    public function __construct(array $dataProviders)
31
    {
32
        $this->dataProviders = $dataProviders;
33
    }
34
35
    /**
36
     * {@inheritdoc}
37
     */
38
    public function getCollection(string $resourceClass, string $operationName = null)
39
    {
40
        foreach ($this->dataProviders as $dataProvider) {
41
            try {
42
                if ($dataProvider instanceof RestrictedDataProviderInterface
43
                    && !$dataProvider->supports($resourceClass, $operationName)) {
44
                    continue;
45
                }
46
47
                return $dataProvider->getCollection($resourceClass, $operationName);
48
            } catch (ResourceClassNotSupportedException $e) {
49
                @trigger_error(sprintf('Throwing a "%s" in a data provider is deprecated in favor of implementing "%s"', ResourceClassNotSupportedException::class, RestrictedDataProviderInterface::class), E_USER_DEPRECATED);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
50
                continue;
51
            }
52
        }
53
54
        return [];
55
    }
56
}
57