forked from schmittjoh/JMSI18nRoutingBundle
/
JMSI18nRoutingExtension.php
89 lines (77 loc) · 3.31 KB
/
JMSI18nRoutingExtension.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
/*
* Copyright 2012 Johannes M. Schmitt <schmittjoh@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace JMS\I18nRoutingBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
/**
* DI Extension.
*
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
*/
class JMSI18nRoutingExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$processor = new Processor();
$config = $processor->processConfiguration(new Configuration, $configs);
$loader = new XmlFileLoader($container, new FileLocator(array(__DIR__.'/../Resources/config')));
$loader->load('services.xml');
$container->setParameter('jms_i18n_routing.default_locale', $config['default_locale']);
$container->setParameter('jms_i18n_routing.locales', $config['locales']);
$container->setParameter('jms_i18n_routing.catalogue', $config['catalogue']);
$container->setParameter('jms_i18n_routing.strategy', $config['strategy']);
$container->setParameter('jms_i18n_routing.redirect_to_host', $config['redirect_to_host']);
$this->addClassesToCompile(array(
$container->getDefinition('jms_i18n_routing.router')->getClass(),
));
if ('prefix' === $config['strategy']) {
$container
->getDefinition('jms_i18n_routing.locale_choosing_listener')
->setPublic(true)
->addTag('kernel.event_listener', array('event' => 'kernel.exception', 'priority' => 128))
;
}
if ($config['hosts']) {
$container
->getDefinition('jms_i18n_routing.router')
->addMethodCall('setHostMap', array($config['hosts']))
;
$container
->getDefinition('jms_i18n_routing.locale_resolver.default')
->addArgument(array_flip($config['hosts']))
;
} else {
$container
->getDefinition('jms_i18n_routing.cookie_setting_listener')
->setPublic(true)
->addTag('kernel.event_listener', array('event' => 'kernel.response', 'priority' => 256))
;
}
// remove route extractor if JMSTranslationBundle is not enabled to avoid any problems
$bundles = $container->getParameter('kernel.bundles');
if (!isset($bundles['JMSTranslationBundle'])) {
$container->removeDefinition('jms_i18n_routing.route_translation_extractor');
}
}
public function getAlias()
{
return 'jms_i18n_routing';
}
}