Загрузить конфигурацию объекта из базы данных в Symonfy

Мне нужно загрузить базу данных и конфигурацию сущности в Symfony2 из таблиц в базе данных во время выполнения.
По умолчанию конфигурация базы данных Symfony хранится в config.yml. Имена таблиц для сущности определены в аннотациях @ORM.
Но некоторые мои сущности могут храниться динамически в любой базе данных с любым именем таблицы, и заранее это не определено (кроме схемы таблицы), поэтому я не могу сохранить конфигурацию базы данных в конфигурации.
Я хочу установить конфигурацию базы данных по умолчанию в config.yml. Эта база данных будет хранить три таблицы:

  1. Содержит подключения к базам данных (database_connection_id, хост, порт, пользователь, пароль, имя базы данных)
  2. Содержит отношение (имя_ сущности, имя_таблицы)
  3. Содержит отношение (table_name, database_connection_id)

Мне нужно динамически загружать эту конфигурацию в веб-запрос, прежде чем отправлять запросы сущностям, использующим EntityManager или EntityRepository. Другими словами, я хочу обработать эту конфигурацию, установить table_name и connection для каждой сущности перед обработкой веб-запроса в Controller. И тогда работа с сущностями прозрачна как обычно.

Как я понимаю, мне нужно реализовать что-то вроде Symfony ConfigLoader, но при обработке конфигурации соединение с базой данных отсутствует. Имя таблицы для сущности может быть установлено с использованием метаданных класса, но я не уверен, что это правильное решение.

Возможный способ — генерировать symfony config.yml для соединений и src / * Bundle / Resources / config / doctrine / *. Orm.yml для имен таблиц (вместо аннотаций @ORM) из базы данных каждый веб-запрос (или один раз при изменении конфигурации базы данных). в базе данных по умолчанию) очистите кэш базы данных Symfony и затем загрузите ядро ​​Symfony. Но этот путь выглядит безобразно.
Кроме того, для фоновых задач может потребоваться работа с другими таблицами для объекта, а не с веб-запросами. Каждая сущность может иметь более одной таблицы, фоновая задача может генерировать новую таблицу, веб-запрос в это время использует предыдущую версию таблицы.

Может ли это быть реализовано с использованием стандартных гибких компонентов Symfony?

0

Решение

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

Если вы хотите сделать что-то подобное, создайте консольную команду, которая создаст ваши сопоставления и файлы конфигурации, и позвольте symfony очистить и заново создать свой кеш с php app/console clear:cache --env=prod или что-то подобное.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]