我有一个由服务层和存储库层组成的应用程序.对于服务和存储库,我已经声明了接口,我为控制器中的服务注入了接口,并且服务注入了存储库的接口.这一切都是在autowire设置为true的情况下完成的.
当我在其中一个注入的服务上调用一个方法时,它一切正常,只要我不调用需要其中一个注入的存储库的函数.当我尝试调用使用其中一个存储库的函数时,我收到以下错误:
无法自动装配服务"AppBundle\Repository\TestRepository":方法"Doctrine\ORM\EntityRepository :: __ construct()"的参数"$ em"必须具有类型提示或显式赋予值.
现在我认为这与我必须从我的存储库扩展的EntityRepository类这一事实有关,因为当我查看构造函数时,它看起来像这样:
class TestRepository extends EntityRepository implements TestRepositoryInterface
{
public function __construct(
EntityManager $em,
Mapping\ClassMetadata $class
) {
parent::__construct($em, $class);
}
/**
* @return string
*/
public function getTest(): string
{
return 'This is a test';
}
}Run Code Online (Sandbox Code Playgroud)
其中显然包含错误消息中提到的$ em参数.我不知道如何解决这个问题.目前我的服务和存储库在services.yml中配置相同,但由于服务似乎有效,我认为这不是问题.我是否需要为我的存储库禁用autowire并在services.yml中手动配置它们,或者我只是遗漏了一些非常明显的东西?