Как переключаться между различными базами данных, используя приложение Symfony 4 с платформой API? - PullRequest
1 голос
/ 15 мая 2019

Я структурирую приложение Symfony 4, которое также использует платформу API.Проблема в том, что у нас есть требование, чтобы пользователь должен был подключиться к своей собственной базе данных.Поэтому каждый раз, когда он входит в централизованный домен (только для целей доступа), приложение должно будет подключать его к своей собственной базе данных.

Я провел некоторое исследование и обнаружил, что указана ближайшая вещьв Symfony 4 документы представляют собой несколько администраторов сущностей и соединений .

Проблема здесь в том, что, хотя он показывает, как создавать несколько конфигураций для разных соединений с базой данных, он просто указывает, как их создавать дляконкретный Entity Manager, или как получить материал из другого Entity Manager в контроллере Symfony.

В моем случае у нас нет никаких контроллеров.Вместо этого есть API с несколькими конечными точками служб, которые подключаются к базе данных для управления ресурсами через HTTP-запросы.В настоящее время мы всегда используем соединение с базой данных по умолчанию, которое получает конфигурацию из переменной .env.

Я знаю, что придется хранить эту информацию о конфигурации базы данных в сеансе (или что-либо подобное) или проверять, какая база данных является правильной для данного пользователя при каждом запросе API.Но я не совсем уверен, как лучше всего решить эту проблему.

Кроме того, я подумал о создании слушателя события onKernelRequest, как описано в этом потоке

Есть какие-нибудь мысли или идеи, как мне поступить с этим?

РЕДАКТИРОВАТЬ

Это файл packages / doctrine.yaml.Все настроено по умолчанию.

parameters:
    # Adds a fallback DATABASE_URL if the env var is not set.
    # This allows you to run cache:warmup even if your
    # environment variables are not available yet.
    # You should not need to change this value.
    env(DATABASE_URL): ''

doctrine:
    dbal:
        # configure these for your database server
        driver: 'pdo_mysql'
        server_version: '5.7'
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci

        url: '%env(resolve:DATABASE_URL)%'
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Fst\Entity'
                alias: App

А для файла .env:

DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name

, который переопределяется в файле .env.local.

Также,services.yaml имеет конфигурацию по умолчанию с включенным автоматическим подключением.

...