Да, это возможно в два этапа:
1 - переопределить параметр doctrine.orm.entity_manager.class
, чтобы он указывал на пользовательский менеджер сущностей (который должен расширяться Doctrine\ORM\EntityManager
.)
2 - Ваш пользовательский менеджер сущностей должен переопределить метод create
, чтобы он возвращал экземпляр вашего класса. Смотрите мой пример ниже и обратите внимание на последнюю строку, касающуюся MyEntityManager
:
public static function create($conn, Configuration $config, EventManager $eventManager = null) {
if (!$config->getMetadataDriverImpl()) {
throw ORMException::missingMappingDriverImpl();
}
if (is_array($conn)) {
$conn = \Doctrine\DBAL\DriverManager::getConnection($conn, $config, ($eventManager ? : new EventManager()));
} else if ($conn instanceof Connection) {
if ($eventManager !== null && $conn->getEventManager() !== $eventManager) {
throw ORMException::mismatchedEventManager();
}
} else {
throw new \InvalidArgumentException("Invalid argument: " . $conn);
}
// This is where you return an instance of your custom class!
return new MyEntityManager($conn, $config, $conn->getEventManager());
}
Вам также понадобится use
следующее в вашем классе:
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Configuration;
use Doctrine\ORM\ORMException;
use Doctrine\Common\EventManager;
use Doctrine\DBAL\Connection;
Если честно, я удивлен, что 2-й шаг вообще необходим, я думаю, что это возможно сделать, используя только сервисный контейнер.