Bonjour,

Voila j'ai un route loader un peu special :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
<?php
 
namespace App\SubdomainBundle\Routing;
 
use App\SubdomainBundle\Entity\SubdomainRepository;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\Config\Loader\LoaderResolverInterface;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;
 
class RouteLoader implements LoaderInterface
{
    private $domain;
 
    private $subdomains;
 
    private $loaded = false;
 
    public function __construct($domain = 'localhost',$subdomains = array())
    {
        $this->domain = $domain;
        $this->subdomains = $subdomains;
    }
 
    public function load($resource, $type = null)
    {
        if (true === $this->loaded) {
            throw new \RuntimeException('Do not add the "extra" loader twice');
        }
 
        if ($this->subdomains instanceof SubdomainRepository) {
            $repo = $this->subdomains;
            $collection = $repo->findAll();
            $this->subdomains = array();
            foreach ($collection as $entity) {
                $this->subdomains[] = $entity->getName();
            }
        }
 
        $routes = new RouteCollection();
        if (count($this->subdomains)>0) {
 
            $pattern = '/{parameters}';
 
            $defaults = array(
                'parameters'=>null,
            );
 
            $requirements = array(
                'parameters' => '.+',
                'subdomain' => implode('|',$this->subdomains),
            );
 
            $options = array() ;
 
            $host = '{subdomain}'.'.'.$this->domain;
 
            $route = new Route($pattern, $defaults, $requirements,$options,$host);
 
            $routeName = '_subdomain';
 
            $routes->add($routeName, $route);
 
        }
        $this->loaded = true;
 
        return $routes;
    }
 
    public function supports($resource, $type = null)
    {
        return 'subdomain' === $type;
    }
 
    public function getResolver()
    {
    }
 
    public function setResolver(LoaderResolverInterface $resolver)
    {
    }
}
En gros il me permet de gérer mes sous domaines.

Lors de la compilation du Container comme vous le savez le Router génère les fichiers appProdUrlGenerator et appProdUrlMatcher, ce qui est problématique puisque si je gère la liste de mes sous domaine via mysql, lors d'un ajout, il serait préférable que ces derniers soit mis à jour sans pour autant re-compiler le Container et en plus je ne souhaite pas passer par la console.

Si qqn a déjà travaillé sur un cas similaire, je serais ravis qu'il me fasse part de la solution qu'il a mis en place pour résoudre ce petit problème.