Completed
Pull Request — master (#562)
by Oliver
04:48 queued 02:59
created

EntityResolverFactory::createService()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
3
namespace DoctrineORMModule\Service;
4
5
use Doctrine\Common\EventSubscriber;
6
use Doctrine\ORM\Events;
7
use Doctrine\ORM\Tools\ResolveTargetEntityListener;
8
use DoctrineModule\Service\AbstractFactory;
9
use DoctrineORMModule\Options\EntityResolver;
10
use Interop\Container\ContainerInterface;
11
use Zend\EventManager\EventManager;
12
use Zend\ServiceManager\ServiceLocatorInterface;
13
14
class EntityResolverFactory extends AbstractFactory
15
{
16
    /**
17
     * {@inheritDoc}
18
     */
19 72
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
20
    {
21
        /* @var $options EntityResolver */
22 72
        $options      = $this->getOptions($container, 'entity_resolver');
23 72
        $eventManager = $container->get($options->getEventManager());
24 72
        $resolvers    = $options->getResolvers();
25
26 72
        $targetEntityListener = new ResolveTargetEntityListener();
27
28 72
        foreach ($resolvers as $oldEntity => $newEntity) {
29 72
            $targetEntityListener->addResolveTargetEntity($oldEntity, $newEntity, []);
30
        }
31
32
        // Starting from Doctrine ORM 2.5, the listener implements EventSubscriber
33 72
        if ($targetEntityListener instanceof EventSubscriber) {
34 72
            $eventManager->addEventSubscriber($targetEntityListener);
35
        } else {
36
            $eventManager->addEventListener(Events::loadClassMetadata, $targetEntityListener);
37
        }
38
39 72
        return $eventManager;
40
    }
41
42
    /**
43
     * {@inheritDoc}
44
     */
45 72
    public function createService(ServiceLocatorInterface $container)
46
    {
47 72
        return $this($container, EventManager::class);
48
    }
49
50
    /**
51
     * Get the class name of the options associated with this factory.
52
     *
53
     * @return string
54
     */
55 72
    public function getOptionsClass()
56
    {
57 72
        return EntityResolver::class;
58
    }
59
}
60