2021-03-19 15:04:41 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Router;
|
|
|
|
|
2021-03-19 15:13:42 +01:00
|
|
|
use App\Controller\Site\PageController;
|
2021-03-19 15:04:41 +01:00
|
|
|
use App\Repository\Site\NavigationRepositoryQuery;
|
|
|
|
use Symfony\Component\Config\Loader\Loader;
|
|
|
|
use Symfony\Component\Routing\Route;
|
2021-03-19 15:13:42 +01:00
|
|
|
use Symfony\Component\Routing\RouteCollection;
|
2021-03-19 15:04:41 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* class SiteRouteLoader.
|
|
|
|
*
|
|
|
|
* @author Simon Vieille <simon@deblan.fr>
|
|
|
|
*/
|
|
|
|
class SiteRouteLoader extends Loader
|
|
|
|
{
|
|
|
|
protected NavigationRepositoryQuery $navigationQuery;
|
|
|
|
protected $isLoaded = false;
|
|
|
|
|
|
|
|
public function __construct(NavigationRepositoryQuery $navigationQuery)
|
|
|
|
{
|
|
|
|
$this->navigationQuery = $navigationQuery;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function load($resource, ?string $type = null)
|
|
|
|
{
|
|
|
|
if (true === $this->isLoaded) {
|
|
|
|
throw new \RuntimeException('Do not add the "extra" loader twice');
|
|
|
|
}
|
|
|
|
|
|
|
|
$routes = new RouteCollection();
|
|
|
|
$navigations = $this->navigationQuery->find();
|
|
|
|
|
|
|
|
foreach ($navigations as $navigation) {
|
|
|
|
foreach ($navigation->getMenus() as $menu) {
|
|
|
|
foreach ($menu->getRootNode()->getAllChildren() as $node) {
|
|
|
|
$requirements = [];
|
|
|
|
|
|
|
|
$defaults = [
|
|
|
|
'_controller' => PageController::class.'::show',
|
|
|
|
'_node' => $node->getId(),
|
|
|
|
'_menu' => $menu->getId(),
|
|
|
|
'_page' => $node->getPage() ? $node->getPage()->getId() : null,
|
|
|
|
'_navigation' => $navigation->getId(),
|
|
|
|
];
|
|
|
|
|
|
|
|
$route = new Route($node->getUrl(), $defaults, $requirements);
|
|
|
|
$route->setHost($navigation->getDomain());
|
|
|
|
|
2021-03-19 16:25:25 +01:00
|
|
|
$routes->add($node->getRouteName(), $route);
|
2021-03-19 15:04:41 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->isLoaded = true;
|
|
|
|
|
|
|
|
return $routes;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function supports($resource, string $type = null)
|
|
|
|
{
|
|
|
|
return 'extra' === $type;
|
|
|
|
}
|
|
|
|
}
|