3

我创建了一些额外的方法来帮助管理 Symfony2 项目中的实体。我希望这些方法在 Doctrine 的 EntityManager 上可用,它是从具有“doctrine.orm.entity_manager”键的容器中获得的。

我找到了这篇文章,并尝试实现它,但它不起作用。我收到一条错误消息The attribute "name" must be set for path "doctrine.orm.entity_managers".

这是一篇较旧的帖子,因此它可能是某种从那时起已被弃用的“技巧”;我正在使用 Symfony2 和 Doctrine 的最新稳定版本。

有没有办法覆盖 Doctrine 用来创建它的默认 EntityManager 的类,或者我将不得不像另一个服务一样创建并使用它?

4

1 回答 1

2

方式保持不变。

使用扩展Doctrine\ORM\EntityManager的自定义 EntityManager 类覆盖您的 services.yml 中doctrine.orm.entity_manager.classorm.xml参数。

覆盖创建方法(它改变了一点)

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());
}

Error that you see is the fact that you have the wrong settings in the config.yml for doctrine. See reference.

于 2013-10-29T04:05:14.773 回答