#php #wordpress #orm #doctrine-orm
#php #wordpress #orm #doctrine-orm
Вопрос:
Я хотел бы интегрировать Doctrine 2 ORM в WordPress для использования в плагинах, которые я разрабатываю. В настоящее время существует плагин, который предлагает поддержку Doctrine 1.2.3 ORM в WordPress, но не v2.
Самая большая проблема, с которой я сталкиваюсь, заключается в том, что я не понимаю, как Doctrine 2 ORM взаимодействует с моим кодом; в частности, что их конфигурационный код предоставляет мне и куда я должен идти дальше:
// 3.1.1
require dirname( __FILE__ ) . '/lib/Doctrine/ORM/Tools/Setup.php';
$lib = dirname( __FILE__ ) . '/lib';
DoctrineORMToolsSetup::registerAutoloadDirectory($lib);
// 3.1.2
use DoctrineORMEntityManager,
DoctrineORMConfiguration;
if($applicationMode == "development") {
$cache = new DoctrineCommonCacheArrayCache;
} else {
$cache = new DoctrineCommonCacheApcCache;
}
$config = new Configuration;
$config->setMetadataCacheImpl($cache);
$driverImpl = $config->newDefaultAnnotationDriver('/path/to/lib/MyProject/Entities');
$config->setMetadataDriverImpl($driverImpl);
$config->setQueryCacheImpl($cache);
$config->setProxyDir('/path/to/myproject/lib/MyProject/Proxies');
$config->setProxyNamespace('MyProjectProxies');
if ($applicationMode == "development") {
$config->setAutoGenerateProxyClasses(true);
} else {
$config->setAutoGenerateProxyClasses(false);
}
$connectionOptions = array(
'driver' => 'pdo_sqlite',
'path' => 'database.sqlite'
);
$em = EntityManager::create($connectionOptions, $config);
Я продолжил чтение разделов документации вплоть до раздела 8 и получил некоторое представление. Мои вопросы:
-
Достаточно ли этой конфигурации, чтобы я мог работать с Doctrine 2 ORM в своих плагинах?
-
Есть ли какие-либо другие ключевые шаги, которые я пропустил перед началом работы с Doctrine 2 ORM? Плагин WordPress, похоже, автоматически генерирует все соответствующие классы из базы данных. Я несколько раз читал документацию, но чувствую, что пропускаю какой-то важный шаг … или, может быть, Doctrine 2 ORM настолько отличается?
-
Является ли EntityManager какой-то глобальной переменной, которую я могу использовать во всех своих объектах?
-
Я предполагаю, что мне нужно связать все вместе,
@Entity
в файле недостаточно, чтобы Doctrine знала, где находится объект. Есть ли где-нибудь в документации, которая определяет это?
Если кто-нибудь может предоставить краткое изложение того, как все это работает вместе: конфигурация, сущности и т. Д. Или предоставьте какие-либо четкие учебные пособия, которые, возможно, уже существуют, я был бы очень признателен.
Комментарии:
1. Есть 2 вещи, которые мне непонятны. # 1 зачем кому-то это делать, кроме как для вызова? Это просто делает тяжелую систему на тонну тяжелее без реального положительного результата. # 2 Если вы не понимаете Doctrine, зачем вам использовать его в плагинах, которые вам нужно поддерживать? Вся идея сумасшедшая. Используйте предоставленный WordPress API.
Ответ №1:
ИМХО, вы не должны использовать Doctrine2 с WP
-
Doctrine 2 — более подходящее решение для сайта с огромной бизнес-логикой, и я считаю, что вы не используете WP для этих целей
-
Doctrine 2 имеет огромную кодовую базу (~ 11 МБ), которая увеличивает накладные расходы на загрузку классов и обработку запросов
-
Doctrine 2 использует много памяти с режимом гидратации по умолчанию (объект)
-
Создание пользовательского sql намного сложнее с Doctrine.