Замените Symfony 5 маршрутизатор по умолчанию - PullRequest
0 голосов
/ 06 марта 2020

Используя код 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 даже не загружен, ожидаемое поведение было обычным делом, а не эта ошибка :)

Есть мысли, указатели, советы, предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...