Passed
Pull Request — master (#3263)
by
unknown
04:04
created

PayloadParamConverter   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 17
dl 0
loc 40
rs 10
c 1
b 0
f 0
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A supports() 0 3 1
A __construct() 0 3 1
A apply() 0 26 5
1
<?php
2
3
namespace ApiPlatform\Core\Bridge\Symfony\Bundle\ParamConverter;
4
5
use ApiPlatform\Core\EventListener\ToggleableDeserializationTrait;
6
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
7
use ApiPlatform\Core\Util\RequestAttributesExtractor;
8
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
9
use Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\ParamConverterInterface;
10
use Symfony\Component\HttpFoundation\Request;
11
12
class PayloadParamConverter implements ParamConverterInterface
13
{
14
    use ToggleableDeserializationTrait;
15
16
    public function __construct(ResourceMetadataFactoryInterface $resourceMetadataFactory)
17
    {
18
        $this->resourceMetadataFactory = $resourceMetadataFactory;
19
    }
20
21
    public function apply(Request $request, ParamConverter $configuration)
22
    {
23
        $class = $configuration->getClass();
24
25
        if (null === $class) {
0 ignored issues
show
introduced by
The condition null === $class is always false.
Loading history...
26
            throw new \InvalidArgumentException(sprintf(
27
                '%s only supports parameters with class type declaration.',
28
                self::class
29
            ));
30
        }
31
32
        $attributes = RequestAttributesExtractor::extractAttributes($request);
33
34
        if (!$this->isRequestToDeserialize($request, $attributes)) {
35
            return false;
36
        }
37
38
        $data = $request->attributes->get('data');
39
40
        if (!$data instanceof $class || get_class($data) !== $attributes['resource_class']) {
41
            return false;
42
        }
43
44
        $request->attributes->set($configuration->getName(), $data);
45
46
        return true;
47
    }
48
49
    public function supports(ParamConverter $configuration)
50
    {
51
        return null !== $configuration->getClass();
52
    }
53
}
54