我想用doctrine entity manager创建一个PHP包。这个包将在我公司的不同项目中使用,有些项目并不使用教义,而是一个PDO连接。我希望能够用一个现有的独立PDO对象在我的包中示例化一个教义实体管理器,因为我不想(也不能)创建另一个DB连接。我必须使用现有的。是这样吗?类似于:
$em = EntityManager::createWithPDOInstance($pdoObject);
7nbnzgx91#
我自己找到了解决办法。我把代码贴出来,将来可能会对别人有帮助。
<?php namespace MyProject\Factory; use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Annotations\AnnotationRegistry; use Doctrine\DBAL\DriverManager; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; class EntityManagerFactory { /** * @param \PDO $pdo * @return EntityManager */ public function create(\PDO $pdo) { $config = new Configuration(); $config->setProxyDir(__DIR__ . '/EntityProxy'); $config->setProxyNamespace('EntityProxy'); $config->setAutoGenerateProxyClasses(true); AnnotationRegistry::registerFile(__DIR__ . '/../../vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php'); $config->setMetadataDriverImpl(new AnnotationDriver( new AnnotationReader(), array(__DIR__ . '/') )); return EntityManager::create( DriverManager::getConnection( [ 'driver' => 'pdo_' . $pdo->getAttribute(\PDO::ATTR_DRIVER_NAME), 'pdo' => $pdo, ], $config), $config ); } }
fcg9iug32#
我试过你的方法,大部分都有效。我遇到的问题是我的实体也有JmsSerializer注解。当我试图查找一个实体时,它抛出了一个异常,即JmsSerializer注解无法识别。为了解决这个问题,我将AnnotationRegistry::registerFile更改为AnnotationRegistry::registerLoader('class_exists');,这样就解决了我的错误
AnnotationRegistry::registerFile
AnnotationRegistry::registerLoader('class_exists');
2条答案
按热度按时间7nbnzgx91#
我自己找到了解决办法。
我把代码贴出来,将来可能会对别人有帮助。
fcg9iug32#
我试过你的方法,大部分都有效。我遇到的问题是我的实体也有JmsSerializer注解。当我试图查找一个实体时,它抛出了一个异常,即JmsSerializer注解无法识别。
为了解决这个问题,我将
AnnotationRegistry::registerFile
更改为AnnotationRegistry::registerLoader('class_exists');
,这样就解决了我的错误