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

Дата оновлення перекладу 2022-12-21

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

Основна система маршрутизації Symfony чудово справляється зі складними наборами маршрутів. Високооптимізований кеш маршрутизації скидається під час розгортання.

Однак, при роботі з великою кількістю даних, кожний з яких вимагає гарного читаного URL (наприклад, з ціллю оптимізації пошукової системи), маршрутизація може втратити швидкість. На додаток до цього, якщо маршрути повинні бути змінені користувачами, кеш маршрутів повинен буде часто перебудовуватися.

Для таких випадків, DynamicRouter пропонує альтернативний метод:

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

Коли всі маршрути відомі під час розгортання, і їх кількість не дуже велика, використання користувацького завантажувача маршрутів є більш бажаним способом додавання нових маршрутів. При роботі лише з одним типом обʼєктів, параметр slug в обʼєкті та анотації @ParamConverter чудово працюють (дивіться FrameworkExtraBundle) .

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

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

DynamicRouter пояснюється у Документації Symfony CMF.