Issues (7)

DependencyInjection/FHMultiSiteExtension.php (1 issue)

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