FHMultiSiteExtension   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 10
eloc 37
c 1
b 0
f 0
dl 0
loc 80
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A createPrefixedPathIdentifiedResolver() 0 25 1
A createHostnameIdentifiedResolver() 0 13 1
A load() 0 16 3
A configureRepository() 0 3 1
A configureResolver() 0 11 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace FH\Bundle\MultiSiteBundle\DependencyInjection;
6
7
use FH\Bundle\MultiSiteBundle\Router\HostnameIdentifiedUrlGenerator;
8
use FH\Bundle\MultiSiteBundle\Router\PathIdentifiedUrlGenerator;
9
use FH\Bundle\MultiSiteBundle\Site\HostnameIdentifiedSiteResolver;
10
use FH\Bundle\MultiSiteBundle\Site\PrefixedPathIdentifiedSiteResolver;
11
use FH\Bundle\MultiSiteBundle\Site\SiteRepositoryInterface;
12
use FH\Bundle\MultiSiteBundle\Site\SiteResolverInterface;
13
use Symfony\Component\Config\FileLocator;
14
use Symfony\Component\Config\Loader\FileLoader;
15
use Symfony\Component\DependencyInjection\ContainerBuilder;
16
use Symfony\Component\DependencyInjection\Loader;
17
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
18
19
/**
20
 * @author Joris van de Sande <[email protected]>
21
 *
22
 * @final
23
 */
24
class FHMultiSiteExtension extends Extension
25
{
26
    public function load(array $configs, ContainerBuilder $container)
27
    {
28
        $configuration = new Configuration();
29
        $config = $this->processConfiguration($configuration, $configs);
30
31
        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
32
        $loader->load('form.yml');
33
34
        $this->configureRepository($config['repository'], $container);
35
36
        if ($config['resolver']['enabled']) {
37
            $loader->load('resolver.yml');
38
            $this->configureResolver($config['resolver'], $container, $loader);
39
40
            if (\in_array($config['resolver']['type'], ['hostname_identified', 'prefixed_path_identified'], true)) {
41
                $loader->load('twig_url_generator.yml');
42
            }
43
        }
44
    }
45
46
    private function configureRepository(string $repositoryServiceId, ContainerBuilder $container): void
47
    {
48
        $container->setAlias(SiteRepositoryInterface::class, $repositoryServiceId);
49
    }
50
51
    private function configureResolver(array $config, ContainerBuilder $container, FileLoader $loader): void
52
    {
53
        if ('hostname_identified' === $config['type']) {
54
            $serviceId = $this->createHostnameIdentifiedResolver($config, $container, $loader);
55
        } elseif ('prefixed_path_identified' === $config['type']) {
56
            $serviceId = $this->createPrefixedPathIdentifiedResolver($config, $container, $loader);
57
        } elseif ('service' === $config['type']) {
58
            $serviceId = $config['service_id'];
59
        }
60
61
        $container->setAlias(SiteResolverInterface::class, $serviceId);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $serviceId does not seem to be defined for all execution paths leading up to this point.
Loading history...
62
    }
63
64
    private function createPrefixedPathIdentifiedResolver(
65
        array $config,
66
        ContainerBuilder $container,
67
        FileLoader $loader
68
    ): string {
69
        $loader->load('prefixed_path_identified_resolver.yml');
70
71
        $serviceId = PrefixedPathIdentifiedSiteResolver::class;
72
73
        $container->setParameter(
74
            'fh_multi_site.prefixed_path_identified_resolver.identifiers',
75
            array_values($config['identifiers'])
76
        );
77
        $container->setParameter(
78
            'fh_multi_site.prefixed_path_identified_resolver.default_identifier',
79
            $config['default_identifier']
80
        );
81
        $container->setParameter(
82
            'fh_multi_site.prefixed_path_identified_resolver.route_parameter',
83
            $config['route_parameter']
84
        );
85
86
        $container->setAlias('fh_multi_site.resolver.url_generator', PathIdentifiedUrlGenerator::class);
87
88
        return $serviceId;
89
    }
90
91
    private function createHostnameIdentifiedResolver(
92
        array $config,
93
        ContainerBuilder $container,
94
        FileLoader $loader
95
    ): string {
96
        $loader->load('hostname_identified_resolver.yml');
97
98
        $serviceId = HostnameIdentifiedSiteResolver::class;
99
100
        $container->setParameter('fh_multi_site.hostname_identified_resolver.identifier_mapping', $config['host_mapping']);
101
        $container->setAlias('fh_multi_site.resolver.url_generator', HostnameIdentifiedUrlGenerator::class);
102
103
        return $serviceId;
104
    }
105
}
106