Completed
Pull Request — master (#1200)
by Rene
11:27
created

ObjectManagerAwareConstructor::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 2
c 1
b 0
f 1
nc 1
nop 2
dl 0
loc 6
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace JMS\Serializer\Construction;
6
7
use Doctrine\Persistence\ObjectManager;
8
use Doctrine\Persistence\ObjectManagerAware;
9
use JMS\Serializer\DeserializationContext;
10
use JMS\Serializer\Metadata\ClassMetadata;
11
use JMS\Serializer\Visitor\DeserializationVisitorInterface;
12
13
/**
14
 * Object Manager Aware Constructor.
15
 * Injects Object manager on Construction in case ObjectManagerAware Interface is implemented
16
 */
17
class ObjectManagerAwareConstructor implements ObjectConstructorInterface
18
{
19
    /**
20
     * @var ObjectManager
21
     */
22
    private $objectManager;
23
24
    /**
25
     * @var ObjectConstructorInterface
26
     */
27
    private $objectConstructor;
28
29
    /**
30
     * ObjectManagerAwareConstructor constructor.
31
     *
32
     * @param ObjectConstructorInterface $objectConstructor
33
     * @param ObjectManager                $objectManager
34
     */
35
    public function __construct(
36
        ObjectConstructorInterface $objectConstructor,
37
        ObjectManager $objectManager
38
    ) {
39
        $this->objectManager = $objectManager;
40
        $this->objectConstructor = $objectConstructor;
41
    }
42
43
    /**
44
     * {@inheritdoc}
45
     */
46
    public function construct(
47
        DeserializationVisitorInterface $visitor,
48
        ClassMetadata $metadata,
49
        $data,
50
        array $type,
51
        DeserializationContext $context
52
    ): ?object {
53
        $object = $this->objectConstructor->construct(
54
            $visitor,
55
            $metadata,
56
            $data,
57
            $type,
58
            $context
59
        );
60
        if ($object instanceof ObjectManagerAware) {
61
            $metadata = $this->objectManager->getClassMetadata(get_class($object));
62
            $object->injectObjectManager($this->objectManager, $metadata);
63
        }
64
        return $object;
65
    }
66
}
67