Я создаю приложение с 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.
В верхней части написано, что она не соответствует маршруту, нона дне это соответствует!Я не знаю, что с этим делать.
Кроме того, bin/console router:match /test2
соответствует маршруту, а bin/console debug:router
отображает маршрут.Все маршруты маршрутизатора Symfony по умолчанию (который является единственным другим маршрутизатором в цепочке, кроме маршрутизатора плагина) работают должным образом.
Интересно, что все это работало и раньше, когда по-прежнему использовался Symfony 3.