我已经创建了一些其他方法来帮助管理Symfony2项目中的实体。我希望这些方法可以在Doctrine的EntityManager上使用,它是从带有“doctrine.orm.entity_manager”键的容器中获取的。
我找到this post,并尝试实施它,但它无效。我收到一条错误消息The attribute "name" must be set for path "doctrine.orm.entity_managers".
这是一篇较旧的帖子,所以它可能是某种“技巧”,自那时起就被弃用了;我正在使用Symfony2和Doctrine的最新稳定版本。
有没有办法覆盖Doctrine用来创建它的默认EntityManager的类,或者我是否必须像其他服务一样创建并使用它?
答案 0 :(得分:3)
方式保持不变。
使用扩展orm.xml的自定义EntityManager类,覆盖services.yml中Doctrine\ORM\EntityManager的参数doctrine.orm.entity_manager.class
。
覆盖create方法(改变了一点)
public static function create($conn, Configuration $config, EventManager $eventManager = null)
{
if ( ! $config->getMetadataDriverImpl()) {
throw ORMException::missingMappingDriverImpl();
}
switch (true) {
case (is_array($conn)):
$conn = \Doctrine\DBAL\DriverManager::getConnection(
$conn, $config, ($eventManager ?: new EventManager())
);
break;
case ($conn instanceof Connection):
if ($eventManager !== null && $conn->getEventManager() !== $eventManager) {
throw ORMException::mismatchedEventManager();
}
break;
default:
throw new \InvalidArgumentException("Invalid argument: " . $conn);
}
// return your instance of em
return new MyEntityManager($conn, $config, $conn->getEventManager());
}
您看到的错误是您在config.yml中为doctrine设置了错误的设置。请参阅reference。