Используя код CMF в качестве справки, я пытаюсь заменить маршрутизатор по умолчанию на цепной маршрутизатор ... а не просто украшать ...
public function process(ContainerBuilder $container)
{
// NOT available using alias for some reason???
$definition = $container->getDefinition('MyBundle\Routing\ChainRouter');
foreach ($container->findTaggedServiceIds($this->routerTag) as $id => $attributes) {
$priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
$definition->addMethodCall('add', [new Reference($id), $priority]);
}
$container->setDefinition('router.default', $definition);
}
Вот пакет услуг. xml
<services>
<service id="MyBundle\Routing\ChainRouter" />
<service id="cmf_routing.router" alias="MyBundle\Routing\ChainRouter" />
<!-- <service id="MyBundle\Routing\DynamicRouter">-->
<!-- <tag name="router" priority="100" />-->
<!-- </service>-->
<service id="Symfony\Bundle\FrameworkBundle\Routing\Router">
<tag name="router" priority="1" />
<tag name="monolog.logger" channel="router" />
<tag name="container.service_subscriber" id="routing.loader" />
<argument type="service" id="Psr\Container\ContainerInterface" />
<argument>%router.resource%</argument>
<argument type="collection">
<argument key="cache_dir">%kernel.cache_dir%</argument>
<argument key="debug">%kernel.debug%</argument>
<argument key="generator_class">Symfony\Component\Routing\Generator\CompiledUrlGenerator</argument>
<argument key="generator_dumper_class">Symfony\Component\Routing\Generator\Dumper\CompiledUrlGeneratorDumper</argument>
<argument key="matcher_class">Symfony\Bundle\FrameworkBundle\Routing\RedirectableCompiledUrlMatcher</argument>
<argument key="matcher_dumper_class">Symfony\Component\Routing\Matcher\Dumper\CompiledUrlMatcherDumper</argument>
</argument>
<argument type="service" id="router.request_context" on-invalid="ignore" />
<argument type="service" id="parameter_bag" on-invalid="ignore" />
<argument type="service" id="logger" on-invalid="ignore" />
<argument>%kernel.default_locale%</argument>
<call method="setConfigCacheFactory">
<argument type="service" id="config_cache_factory" />
</call>
</service>
Я получаю сообщение об ошибке Невозможно загрузить ресурс "kernel :: loadRoutes"
Со следующей трассировкой стека
LoaderLoadException Symfony\Component\Config\Exception\LoaderLoadException: Cannot load resource "kernel::loadRoutes".
at vendor/symfony/config/Loader/DelegatingLoader.php:37 at Symfony\Component\Config\Loader\DelegatingLoader->load('kernel::loadRoutes', null)
(vendor/symfony/framework-bundle/Routing/DelegatingLoader.php:67) at Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader->load('kernel::loadRoutes', null)
(vendor/symfony/framework-bundle/Routing/Router.php:66) at Symfony\Bundle\FrameworkBundle\Routing\Router->getRouteCollection()
(vendor/symfony/routing/Router.php:358) at Symfony\Component\Routing\Router->getMatcherDumperInstance()
(vendor/symfony/routing/Router.php:289) at Symfony\Component\Routing\Router->Symfony\Component\Routing\{closure}(object(ResourceCheckerConfigCache))
(vendor/symfony/config/ResourceCheckerConfigCacheFactory.php:39) at Symfony\Component\Config\ResourceCheckerConfigCacheFactory->cache('/vagrant/project/var/cache/dev/url_matching_routes.php', object(Closure))
(vendor/symfony/routing/Router.php:297) at Symfony\Component\Routing\Router->getMatcher()
(vendor/symfony/routing/Router.php:251) at Symfony\Component\Routing\Router->matchRequest(object(Request))
(/vagrant/bundles/mybundle/src/Routing/ChainRouter.php:191) at MyBundle\Routing\ChainRouter->doMatch('/', object(Request))
(/vagrant/bundles/mybundle/src/Routing/ChainRouter.php:158) at MyBundle\Routing\ChainRouter->matchRequest(object(Request))
(vendor/symfony/http-kernel/EventListener/RouterListener.php:112)
, усеченной для краткость ...
Я чувствую, что это происходит из-за того, что маршрутизатор по умолчанию "заменен" на этапе компиляции и неправильно инициализирован. Видя, что DynamicRouter даже не загружен, ожидаемое поведение было обычным делом, а не эта ошибка :)
Есть мысли, указатели, советы, предложения?