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)
{
}
} |
Partager