使用Symfony3.3将存储库注入服务时出错
我有一个由服务层和存储库层组成的应用程序。对于服务和存储库,我已经声明了接口,并在控制器中为服务注入了接口,而为服务注入了存储库的接口。当autowire设置为true时,所有这些都将完成 当我在一个注入的服务上调用一个方法时,只要我不调用一个需要注入的存储库的函数,它就可以正常工作。当我尝试调用使用其中一个存储库的函数时,会出现以下错误: 无法自动连线服务“AppBundle\Repository\TestRepository”:方法“条令\ORM\EntityRepository::\uu构造()”的参数“$em”必须具有类型提示或显式给定值 现在我想这与我的存储库从中扩展的EntityRepository类有关,因为当我查看构造函数时,它看起来像这样: 类TestRepository扩展EntityRepository实现TestRepositoryInterface { 公共函数构造( EntityManager$em, 映射\ClassMetadata$class ) { 父项::_构造($em,$class); } /** *@返回字符串 */ 公共函数getTest():字符串 { 返回“这是一个测试”; }使用Symfony3.3将存储库注入服务时出错,symfony,dependency-injection,doctrine-orm,Symfony,Dependency Injection,Doctrine Orm,我有一个由服务层和存储库层组成的应用程序。对于服务和存储库,我已经声明了接口,并在控制器中为服务注入了接口,而为服务注入了存储库的接口。当autowire设置为true时,所有这些都将完成 当我在一个注入的服务上调用一个方法时,只要我不调用一个需要注入的存储库的函数,它就可以正常工作。当我尝试调用使用其中一个存储库的函数时,会出现以下错误: 无法自动连线服务“AppBundle\Repository\TestRepository”:方法“条令\ORM\EntityRepository::\uu构
}无法直接实例化存储库。您需要使用EntityManager::getRepository 因此,您需要在services.yml中定义您的回购协议
// services.yml
AppBundle\Repository\UserRepository:
factory: 'doctrine.orm.entity_manager:getRepository'
arguments: ['AppBundle\Entity\User']
然后自动线注入就可以工作了
我很想知道autowire是否真的流行起来。这本身就是令人沮丧的,因为有些服务是通过魔法连接的,而另一些则需要手动干预,这可能会导致一点混乱。实际上,有一种方法可以做到这一点,但我不确定我们是否可以/应该做到这一点
class TestRepository extends EntityRepository
{
// Constructor for autowiring
public function __construct(EntityManager $em)
{
parent::__construct($em, $em->getClassMetadata(Test::class));
}
当我直接从控制器调用存储库时,这确实是一个解决方案。谢谢。