DamaxCommonExtension::configureListeners()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 9
nc 3
nop 2
dl 0
loc 16
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Damax\Common\Bridge\Symfony\Bundle\DependencyInjection;
6
7
use Damax\Common\Bridge\Symfony\Bundle\Listener\DeserializeListener;
8
use Damax\Common\Bridge\Symfony\Bundle\Listener\DomainEventListener;
9
use Damax\Common\Bridge\Symfony\Bundle\Listener\PaginationListener;
10
use Damax\Common\Bridge\Symfony\Bundle\Listener\SerializeListener;
11
use Ramsey\Uuid\Uuid;
12
use Symfony\Component\Config\FileLocator;
13
use Symfony\Component\DependencyInjection\ContainerBuilder;
14
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
15
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;
16
17
final class DamaxCommonExtension extends ConfigurableExtension
18
{
19
    public function loadInternal(array $config, ContainerBuilder $container)
20
    {
21
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
22
23
        $bundles = $container->getParameter('kernel.bundles');
24
25
        if (isset($bundles['DoctrineBundle'])) {
26
            $loader->load('doctrine.xml');
27
        }
28
29
        if (isset($bundles['TwigBundle'])) {
30
            $loader->load('twig.xml');
31
        }
32
33
        if (isset($bundles['SimpleBusEventBusBundle'])) {
34
            $loader->load('simple-bus.xml');
35
        }
36
37
        if (class_exists(Uuid::class)) {
38
            $loader->load('ramsey_uuid.xml');
39
        }
40
41
        $this->configureListeners($config['listeners'], $container);
42
    }
43
44
    private function configureListeners(array $config, ContainerBuilder $container): self
45
    {
46
        $listeners = [
47
            'serialize' => SerializeListener::class,
48
            'deserialize' => DeserializeListener::class,
49
            'pagination' => PaginationListener::class,
50
            'domain_events' => DomainEventListener::class,
51
        ];
52
53
        foreach ($listeners as $id => $className) {
54
            if ($config[$id]) {
55
                $container->autowire($className)->addTag('kernel.event_subscriber');
56
            }
57
        }
58
59
        return $this;
60
    }
61
}
62