ArrayManagerRegistry::__construct()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 21
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 21
ccs 12
cts 12
cp 1
rs 9.3142
c 0
b 0
f 0
cc 3
eloc 16
nc 4
nop 5
crap 3
1
<?php
2
namespace LunixRESTBasics\ManagerRegistry;
3
4
use Doctrine\Common\Persistence\AbstractManagerRegistry;
5
6
/**
7
 * A basic implementation of Doctrine\Common\Persistence\AbstractManagerRegistry that uses an associative array as a container.
8
 * This class is so that we can use a more generic ManagerRegistry, but usually frameworks provide the implementation.
9
 * Only use this if your codebase doesn't have something more complete.
10
 * Class ArrayManagerRegistry
11
 * @package LunixRESTBasics\ManagerRegistry
12
 */
13
class ArrayManagerRegistry extends AbstractManagerRegistry
14
{
15
    /**
16
     * @var array
17
     */
18
    protected $container;
19
20
    /**
21
     * ArrayManagerRegistry constructor.
22
     * @param string $name
23
     * @param array $connections
24
     * @param array $managers
25
     * @param string $defaultConnection
26
     * @param string $defaultManager
27
     */
28 10
    public function __construct(
29
        $name,
30
        array $connections,
31
        array $managers,
32
        $defaultConnection,
33
        $defaultManager
34
    ) {
35 10
        $i = 0;
36 10
        foreach($connections as $name => $connection) {
37 6
            $this->container[$i] = $connection;
38 6
            $connections[$name] = $i;
39 6
            $i++;
40
        }
41 10
        foreach($managers as $name => $manager) {
42 6
            $this->container[$i] = $manager;
43 6
            $managers[$name] = $i;
44 6
            $i++;
45
        }
46
47 10
        parent::__construct($name, $connections, $managers, $defaultConnection, $defaultManager, null);
48 10
    }
49
50
    /**
51
     * @param string $name
52
     * @return mixed
53
     */
54 10
    protected function getService($name)
55
    {
56 10
        return $this->container[$name];
57
    }
58
59
    /**
60
     * @param string $name
61
     */
62
    protected function resetService($name)
63
    {
64
        $this->container[$name] = null;
65
        //TODO: This should recreate an object manager, however the abstract this is based off of doesn't really hint on how
66
    }
67
68
    /**
69
     * @param string $alias
70
     * @return mixed
71
     * @throws \Exception
72
     * Note that this probably should use ORMException, but that so far this class doesn't know about ORM (just persistence)
73
     */
74
    public function getAliasNamespace($alias)
75
    {
76
        foreach (array_keys($this->getManagers()) as $name) {
77
            try {
78
                return $this->getManager($name)->getConfiguration()->getEntityNamespace($alias);
0 ignored issues
show
Bug introduced by
The method getConfiguration() does not seem to exist on object<Doctrine\Common\Persistence\ObjectManager>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
79
            } catch (\Exception $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
80
            }
81
        }
82
        throw new \Exception("Unknown alias: $alias");
83
    }
84
}
85