Doctrine 2 ORM и WordPress - централизация управления Doctrine для нескольких зависимых приложений - PullRequest
2 голосов
/ 05 октября 2011

В WordPress плагины создаются и распространяются в виде пакетов для установки другими пользователями WordPress.

Каждый плагин, который я создаю, разделяет некоторые общие сущности в основном плагине. Я борюсь за создание и управление EntitiyManager для использования среди этих плагинов.

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

Вариант 1: Один глобальный EntityManager

// Example Plugin
    // Unique Entities
    // Add Unique Entity Paths and REQUIRED Entity Paths from Core Entities to EntityManager

// Example Plugin
    // Unique Entities
    // Add Unique Entity Paths and REQUIRED Entity Paths from Core Entities to EntityManager

// Core Plugin
    // Core Entities
    // Contains EntityManager

Проблема с этой версией заключается в том, что хотя есть способ добавить пути к MetadataDriver:

$entityManager->getConfig()->getMetadataDriverImpl()->addPaths();

Я не уверен, что это действительно обновит MetadataDriver в пределах config этого EntityManager. Меня беспокоит то, что это вернет только config, который был обновлен с новыми путями, и не обновит конфигурацию EntityManager.

Это правда?

Обратите внимание, что нет функции setConfig, поэтому, если она есть, мне придется воссоздавать EntityManager из каждого плагина, побеждая цель централизованного EntityManager.

Вариант 2: Несколько EntityManager

// Example Plugin
    // Unique Entities
    // Create EntityManager with Unique Entity path and path to Core Entities that are required for this plugin.

// Core Plugin
    // Core Entities

Проблема с этой реализацией в том, что она кажется неэффективной. Я заметил, что есть плагин Doctrine для WordPress, хотя это Doctrine 1.2.3, и он позволяет вам иметь одно централизованное место, которое, как я предполагаю, подходит для управления приложениями, которые совместно используют ресурсы, такие как Core Entities .

Что вы думаете об использовании Доктрины в этом сценарии? Есть ли способ централизовать операции так, чтобы управление ORM осуществлялось через один центральный плагин, от которого зависят другие?

1 Ответ

1 голос
/ 05 октября 2011

Мне удалось выяснить, что:

$entityManager->getConfiguration()->getMetadataDriverImpl()->addPaths();

Фактически добавляет дополнительные пути к объекту $entityManager, а не только к конфигурации, которая возвращается с getConfiguration.

Я буду продолжать дорабатывать эту реализацию и обновлять свои результаты здесь.Надеюсь, ядро ​​может стать распространяемым в качестве плагина для использования другими программистами.

...