symfony2自定义存储库扩展EntityRepository
我试图在symfony2中实现一个自定义存储库类,我希望它扩展symfony2自定义存储库扩展EntityRepository,symfony,doctrine,Symfony,Doctrine,我试图在symfony2中实现一个自定义存储库类,我希望它扩展EntityRepository类。我在将get参数传递给父(即EntityRepository)构造函数时遇到问题。这是父构造函数的签名: public function __construct($em, Mapping\ClassMetadata $class) 因此,我必须将其添加到我的services.yml文件中,以获取参数: parameters: user_provider.class: Untitled\F5
EntityRepository
类。我在将get参数传递给父(即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/
是我保存代码的地方)
我不明白。这里怎么了?我做错了什么?元数据是通过MetadataFactory获得的。例如,您可以在EntityManager中看到它是如何工作的
public function getClassMetadata($className)
{
return $this->metadataFactory->getMetadataFor($className);
}
您还可以将存储库作为服务检索。看看这个。您不需要自己插入这些构造函数参数,只需指定要使用的存储库类:
/**
* @Entity(repositoryClass="MyProject\UserRepository")
*/
class User
{
...
}
另请参见未键入的类名“ClassMetaData”应为ClassMetaData
class: Doctrine\ORM\Mapping\ClassMetadata