Цепной маршрутизатор Symfony CMF: ошибка 404, несмотря на сопоставление маршрутов

Я создаю приложение на 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. Так выглядит вкладка «Routing» в профилировщике Symfony.

Цепной маршрутизатор Symfony CMF: ошибка 404, несмотря на сопоставление маршрутов

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
135
1

Ответы 1

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

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

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

Другие вопросы по теме