Я структурирую приложение 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 имеет конфигурацию по умолчанию с включенным автоматическим подключением.