Поиск маршрутов из базы данных: Symfony CMF DynamicRouter

Дата обновления перевода 2023-01-12

Поиск маршрутов из базы данных: Symfony CMF DynamicRouter

Основная система Symfony Routing великолепно справляется со сложными наборами маршрутов. Высокооптимизированный кеш маршрутизации сбрасывается во время развёртывания.

Однако, при работе с большим количеством данных, каждый из которых требует красивый читаемый URL (например, с целью оптимизации поисковой системы), маршрутизация может потерять в скорости. В дополнение к этому, если маршруты должны быть изменены пользователями, кеш маршрутов должен будет часто перестраиваться.

Для таких случаев, DynamicRouter предлагает альтернативный подход:

  • Маршруты хранятся в базе данных;
  • В поле пути существует каталог (индекс) базы данных, и поиск масштабируется до огромных чисел разных маршрутов;
  • Записи влияют только на каталог базы данных, что очень эффективно.

Когда все маршруты известны во время развёртывания, и их количство не очень большое, использование пользовательского загрузчика маршрутов является более предпочитаемым способом добавления новых маршрутов. При работе только с одним типом объектов, параметр slug в объекте и атрибуте #[ParamConverter] отлично работают (смотрите FrameworkExtraBundle) .

DynamicRouter полезен тогда, когда вам надо, чтобы объекты Route имели полный набор функций Symfony. Каждый маршрут может определять конкретный контроллер, чтобы вы могли отделять структуру URL от логики вашего приложения.

DynamicRouter имеет встроенную поддержку Doctrine ORM и Doctrine PHPCR-ODM, но предоставляет ContentRepositoryInterface для написания пользовательского загрузчика, например, для другого типа базы даннхы или REST API или чего-либо ещё.

DynamicRouter объясняется в Документации Symfony CMF.