EntityManagerProviderFactory   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 2
eloc 11
c 1
b 0
f 0
dl 0
loc 34
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 21 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Arp\LaminasDoctrine\Factory\Service\EntityManager;
6
7
use Arp\LaminasDoctrine\Config\EntityManagerConfigs;
8
use Arp\LaminasDoctrine\Service\EntityManager\EntityManagerContainer;
9
use Arp\LaminasDoctrine\Service\EntityManager\EntityManagerProvider;
10
use Arp\LaminasDoctrine\Service\EntityManager\EntityManagerProviderInterface;
11
use Arp\LaminasDoctrine\Service\EntityManager\Exception\EntityManagerProviderException;
12
use Arp\LaminasFactory\AbstractFactory;
13
use Doctrine\ORM\EntityManagerInterface;
14
use Laminas\ServiceManager\Exception\ServiceNotCreatedException;
15
use Laminas\ServiceManager\Exception\ServiceNotFoundException;
16
use Psr\Container\ContainerExceptionInterface;
17
use Psr\Container\ContainerInterface;
18
19
final class EntityManagerProviderFactory extends AbstractFactory
20
{
21
    /**
22
     * @param ContainerInterface $container
23
     * @param string             $requestedName
24
     * @param array<mixed>|null  $options
25
     *
26
     * @return EntityManagerProviderInterface
27
     *
28
     * @throws ServiceNotCreatedException
29
     * @throws ServiceNotFoundException
30
     * @throws ContainerExceptionInterface
31
     */
32
    public function __invoke(
33
        ContainerInterface $container,
34
        string $requestedName,
35
        array $options = null
36
    ): EntityManagerProviderInterface {
37
        /** @var EntityManagerConfigs $configs */
38
        $configs = $this->getService($container, EntityManagerConfigs::class, $requestedName);
39
40
        /** @var EntityManagerContainer $entityManagerManager */
41
        $entityManagerManager = $this->getService($container, EntityManagerContainer::class, $requestedName);
42
43
        /** @var EntityManagerInterface[] $entityManagers */
44
        $entityManagers = [];
45
46
        try {
47
            return new EntityManagerProvider($configs, $entityManagerManager, $entityManagers);
48
        } catch (EntityManagerProviderException $e) {
49
            throw new ServiceNotCreatedException(
50
                sprintf('Failed to create entity manager provider \'%s\': %s', $requestedName, $e->getMessage()),
51
                $e->getCode(),
52
                $e
53
            );
54
        }
55
    }
56
}
57