DoctrineMiddlewarePass::process()   A
last analyzed

Complexity

Conditions 5
Paths 4

Size

Total Lines 27

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 5.005

Importance

Changes 0
Metric Value
dl 0
loc 27
ccs 16
cts 17
cp 0.9412
rs 9.1768
c 0
b 0
f 0
cc 5
nc 4
nop 1
crap 5.005
1
<?php
2
namespace League\Tactician\Bundle\DependencyInjection\Compiler;
3
4
use League\Tactician\Doctrine\ORM\RollbackOnlyTransactionMiddleware;
5
use League\Tactician\Doctrine\ORM\TransactionMiddleware;
6
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
7
use Symfony\Component\DependencyInjection\ContainerBuilder;
8
use Symfony\Component\DependencyInjection\Definition;
9
use Symfony\Component\DependencyInjection\Reference;
10
11
/**
12
 * This compiler pass registers doctrine entity manager middleware
13
 */
14
class DoctrineMiddlewarePass implements CompilerPassInterface
15
{
16
    /**
17
     * {@inheritdoc}
18
     */
19 72
    public function process(ContainerBuilder $container)
20
    {
21 72
        if (!class_exists(TransactionMiddleware::class) || !$container->hasParameter('doctrine.entity_managers')) {
22 66
            return;
23
        }
24
25 6
        $entityManagers = $container->getParameter('doctrine.entity_managers');
26 6
        if (empty($entityManagers)) {
27
            return;
28
        }
29
30 6
        foreach ($entityManagers as $name => $serviceId) {
31 6
            $container->setDefinition(
32 6
                sprintf('tactician.middleware.doctrine.%s', $name),
33 6
                new Definition(TransactionMiddleware::class, [ new Reference($serviceId) ])
34
            );
35
36 6
            $container->setDefinition(
37 6
                sprintf('tactician.middleware.doctrine_rollback_only.%s', $name),
38 6
                new Definition(RollbackOnlyTransactionMiddleware::class, [ new Reference($serviceId) ])
39
            );
40
        }
41
42 6
        $defaultEntityManager = $container->getParameter('doctrine.default_entity_manager');
43 6
        $container->setAlias('tactician.middleware.doctrine', sprintf('tactician.middleware.doctrine.%s', $defaultEntityManager));
44 6
        $container->setAlias('tactician.middleware.doctrine_rollback_only', sprintf('tactician.middleware.doctrine_rollback_only.%s', $defaultEntityManager));
45 6
    }
46
}
47
48