Как организовать роутинг из базы данных в symfony 4?

Пользователь

от vladimir , в категории: PHP , год назад

Как организовать роутинг из базы данных в symfony 4?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от jedidiah.brown , год назад

@vladimir 

В Symfony 4 есть несколько способов организации роутинга из базы данных, но я опишу наиболее распространенный подход:

  1. Создайте сущность (Entity) для хранения маршрутов в базе данных. Например, вы можете создать класс Route, который содержит поля для URL-адреса, имени контроллера, имени метода и т.д.
  2. Создайте репозиторий (Repository) для этой сущности, который будет выполнять запросы к базе данных для извлечения маршрутов. Вы можете использовать Doctrine ORM для этого.
  3. Создайте сервис (Service), который будет использовать репозиторий для получения маршрутов из базы данных. Например, вы можете создать класс DatabaseRouteLoader, который будет содержать метод loadRoutes(), который будет использовать репозиторий для извлечения маршрутов.
  4. Создайте провайдер маршрутов (Route Provider), который будет использовать сервис DatabaseRouteLoader для получения маршрутов из базы данных и добавления их в систему маршрутизации Symfony. Например, вы можете создать класс DatabaseRouteProvider, который будет реализовывать интерфейс RouteProviderInterface.
  5. Зарегистрируйте провайдер маршрутов в вашем приложении Symfony. Вы можете сделать это в файле services.yaml, добавив соответствующую конфигурацию. Например:
1
2
3
4
5
6
services:
    AppProviderDatabaseRouteProvider:
        arguments:
            - '@AppServiceDatabaseRouteLoader'
        tags:
            - { name: 'routing.route_provider' }


Это пример конфигурации, которая регистрирует провайдер маршрутов AppProviderDatabaseRouteProvider с аргументом AppServiceDatabaseRouteLoader и тегом routing.route_provider.

  1. Теперь маршруты из базы данных должны быть доступны в вашем приложении Symfony.


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