При выполнении команды https://symfony.com/doc/3.4/routing/custom_route_loader.html для создания пользовательского загрузчика маршрута я вижу желаемый маршрут в debug:router
, но cache:clear
идет вечно и использует много процессора.
Я пытался использоватьСпособ «настраиваемого обслуживания» и «настраиваемого маршрутизатора».
Это загрузчик настраиваемого маршрута:
use Symfony\Component\Config\Loader\Loader;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;
use Doctrine\ORM\EntityManagerInterface;
class EventRouteLoader extends Loader {
private $isLoaded = false;
protected $em;
public function init(EntityManagerInterface $em) {
$this->em = $em;
}
public function load($resource, $type = NULL) {
if (true === $this->isLoaded) {
throw new \RuntimeException('Do not add the "extra" loader twice');
}
$routes = new RouteCollection();
foreach ($this->em->getRepository('AppBundle:Event')->findAll() as $event) {
if ($event->getAuthType() == 'with_code' && $event->getAccessCode() && strlen($event->getAccessCode()) > 4) {
$path = '/' . $event->getAccessCode();
$defaults = [
'_controller' => 'AppBundle:Invitation:page',
'event' => $event,
'code' => $event->getAccessCode(),
'activePageNumber' => 1,
];
$requirements = [];
$route = new Route($path, $defaults, $requirements);
// add the new route to the route collection
$routeName = 'eventRoute'.$event->getId();
$routes->add($routeName, $route);
}
}
$this->isLoaded = true;
return $routes;
}
public function supports($resource, $type = null){
return 'custom_event_routes' === $type;
}
}
Это мое текущее определение службы:
em:
class: Doctrine\ORM\EntityManager
factory: ['@doctrine', 'getManager']
event_route_loader:
class: AppBundle\Routing\EventRouteLoader
autowire: false
autoconfigure: false
public: true
tags: [routing.loader]
calls:
- [ init, ['@em']]
А ссылка в routing.yml
event_routes:
resource: .
type: custom_event_routes