0

我正在尝试在 symfony2 中实现一个自定义存储库类,我希望它扩展EntityRepository类。我无法将获取参数传递给父(即EntityRepository)构造函数。这是父构造函数的签名:

public function __construct($em, Mapping\ClassMetadata $class)

所以我不得不将它添加到我的services.yml文件中,以获取参数:

parameters:
    user_provider.class: Untitled\F5Bundle\Security\UserRepository

services:
    user_meta_data:
        class: Doctrine\ORM\Mapping\ClassMetaData
        arguments:
            name: "Untitled\F5Bundle\Entity\User"
    user_provider:
        class: "%user_provider.class%"
        arguments:
            entityManager: "@doctrine.orm.entity_manager"
            meta_data: "@user_meta_data"

而且我还将注释标签添加到我的User班级(我不确定是否有必要)

现在,当我运行它时,它会引发错误。消息说:

FatalErrorException: Error: Class 'Doctrine\ORM\Mapping\ClassMetaData' not found
in /mnt/data/Projects/F5/app/cache/dev/appDevDebugProjectContainer.php line 2749

/mnt/data/Projects/F5/是我保存代码的地方)

我不明白。这里有什么问题?我究竟做错了什么?

4

3 回答 3

1

元数据是通过 MetadataFactory 获得的。作为一个例子,你可以看到它在 EntityManager 中是如何工作的。

public function getClassMetadata($className)
{
    return $this->metadataFactory->getMetadataFor($className);
}

您也可以将存储库作为服务检索。看看这个问题

于 2013-05-28T05:04:11.887 回答
1

您不需要自己注入这些构造函数参数,只需指定要使用的存储库类:

/**
 * @Entity(repositoryClass="MyProject\UserRepository")
 */
class User
{
    ...
}

另请参阅http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#entity

于 2013-05-28T09:48:21.043 回答
0

你错过了键入的类名“ClassMetaData”应该是ClassMetadata

class: Doctrine\ORM\Mapping\ClassMetadata
于 2013-11-29T11:50:01.503 回答