I18nRouteLoader::addHomepageRedirection()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 7
nc 1
nop 1
1
<?php
2
3
namespace Victoire\Bundle\I18nBundle\Route;
4
5
use Gedmo\Sluggable\Util\Urlizer;
6
use Symfony\Component\Routing\Route;
7
use Symfony\Component\Routing\RouteCollection;
8
use Victoire\Bundle\CoreBundle\Route\RouteLoader as BaseRouteLoader;
9
use Victoire\Bundle\I18nBundle\Resolver\LocaleResolver;
10
11
/**
12
 * The I18nRouteLoader overwrite Victoire default RouteLoader to.
13
 */
14
class I18nRouteLoader extends BaseRouteLoader
15
{
16
    protected $localeResolver;
17
    protected $urlizer;
18
19
    public function __construct($widgets, LocaleResolver $localeResolver)
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
20
    {
21
        parent::__construct($widgets);
22
        $this->localeResolver = $localeResolver;
23
        $this->urlizer = new Urlizer();
24
    }
25
26
    /**
27
     * {@inheritdoc}
28
     */
29
    public function load($resource, $type = null)
30
    {
31
        $collection = new RouteCollection();
32
        foreach ($this->localeResolver->getDomainConfig() as $_domain => $_locale) {
33
            $_collection = parent::load($resource, $type);
34
            foreach ($_collection->all() as $_name => $_route) {
35
                $_route->addDefaults(
36
                    [
37
                        '_locale' => $_locale,
38
                    ]
39
                );
40
                $_route->setHost($_domain);
41
                $collection->add($_locale.'__'.$this->urlizer->urlize($_domain, '_').'__'.$_name, $_route);
42
            }
43
        }
44
45
        /*
46
         * Add default(fallback) route for default locale/domain
47
         * needs to be after the loop
48
         * */
49
        $defaultCollection = parent::load($resource, $type);
50
        $defaultCollection->addDefaults(['_locale' => $this->localeResolver->defaultLocale]);
51
        $collection->addCollection($defaultCollection);
52
53
        if ($this->localeResolver->localePattern == LocaleResolver::PATTERN_PARAMETER) {
54
            $collection = parent::load($resource, $type);
55
            //Prefix every victoire route with the locale
56
            $collection->addPrefix('/{_locale}');
57
            $collection->addCollection($collection);
58
            //Add a redirection to the default locale homepage when empty url '/'
59
            $this->addHomepageRedirection($collection);
60
        }
61
62
        return $collection;
63
    }
64
65
    /**
66
     * Add a homepage redirection route to the collection.
67
     *
68
     * @param RouteCollection $collection The collection where to add the new route
69
     */
70
    protected function addHomepageRedirection(&$collection)
71
    {
72
        $route = new Route(
73
            '/',
74
            [
75
                '_controller' => 'FrameworkBundle:Redirect:urlRedirect',
76
                'path'        => '/'.$this->localeResolver->defaultLocale,
77
                'permanent'   => true,
78
            ]
79
        );
80
81
        $collection->add('victoire_redirect_homepage', $route);
82
    }
83
84
    /**
85
     * Finds a loader able to load an imported resource.
86
     * {@inheritdoc}
87
     */
88
    public function supports($resource, $type = null)
0 ignored issues
show
introduced by
Declare public methods first,then protected ones and finally private ones
Loading history...
89
    {
90
        return $type === 'victoire_i18n';
91
    }
92
}
93