Сетевой маршрутизатор Symfony CMF: ошибка 404, несмотря на соответствие маршрута - PullRequest
0 голосов
/ 16 октября 2018

Я создаю приложение с Symfony 4, которое можно расширить с помощью плагинов.Плагины - это, по сути, связки, но они просто помещаются в папку и их не нужно активировать (например, в config/bundles.php или в config/routes/).

Для того, чтобы плагины автоматически регистрировали маршруты, У меня есть CMF цепочка маршрутизатора переопределить службу Symfony @router по умолчанию.Каждый плагин может иметь службу помеченную router, которую маршрутизатор цепочки добавляет в цепочку.Эта часть работает.

Чтобы плагины могли легче регистрировать маршруты, основное приложение предоставляет класс AnnotationRouter, который принимает путь для поиска аннотированных контроллеров. Затем плагины регистрируют службувот так:

sample_plugin.router:
    class: MyApp\Routing\AnnotationRouter
    arguments: ['@service_container', '@@SamplePlugin/Controller']
    tags:
      - { name: router, priority: 20 }

Однако эти маршруты ведут себя очень странно.На самом деле они работают только по первому запросу после очистки кеша!Все последующие запросы возвращают 404 ошибок.Вот как выглядит вкладка «Маршрутизация» в профилировщике Symfony.

Screenshot of the symfony profiler on subsequent requests

В верхней части написано, что она не соответствует маршруту, нона дне это соответствует!Я не знаю, что с этим делать.

Кроме того, bin/console router:match /test2 соответствует маршруту, а bin/console debug:router отображает маршрут.Все маршруты маршрутизатора Symfony по умолчанию (который является единственным другим маршрутизатором в цепочке, кроме маршрутизатора плагина) работают должным образом.

Интересно, что все это работало и раньше, когда по-прежнему использовался Symfony 3.

1 Ответ

0 голосов
/ 17 октября 2018

Хорошо, выясняется, что в конце концов это не проблема с маршрутизатором CMF Routing chain, а скорее с реализацией реального маршрутизатора.

Моя реализация маршрутизатора такая же, как описано в этот вопрос .Проблема была связана с устройством чтения аннотаций Doctrine и автозагрузкой аннотаций.Я закончил тем, что установил indigophp/doctrine-annotation-autoload, что, очевидно, является лишь обходным путем.

См. Также Автозагрузка классов аннотаций на GitHub.

...