Поиск маршрутов из базы данных: Symfony CMF DynamicRouter
Дата обновления перевода 2023-09-26
Поиск маршрутов из базы данных: 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.