[英]references class “Doctrine\ODM\MongoDB\UnitOfWork” but no such service exists
I'm currently using Symfony 4 with Doctrine MongoDB Bundle, following the instruction from this link: DoctrineMongoDBBundle . 我目前正在按照此链接的说明使用Symfony 4和Doctrine MongoDB Bundle: DoctrineMongoDBBundle 。 So, I have a UserDocument:
因此,我有一个UserDocument:
src/Document/UserDocument.php src / Document / UserDocument.php
/** @MongoDB\Document(collection="user", repositoryClass="App\Repository\UserRepository") */
class UserDocument
{
/**
* @MongoDB\Id
* @var ObjectId
*/
private $id;
/**
* @MongoDB\Field(type="string", name="first_name")
* @var string
*/
private $firstName;
/**
* @MongoDB\Field(type="string", name="middle_name")
* @var string
*/
private $middleName;
/**
* @MongoDB\Field(type="string", name="last_name")
* @var string
*/
private $lastName;
}
src/Repository/UserRepository.php src / Repository / UserRepository.php
use Doctrine\ODM\MongoDB\DocumentRepository;
class UserRepository extends DocumentRepository
{
}
src/Controller/Content.php src / Controller / Content.php
class Content extends Controller 类内容扩展Controller
{
/**
* @Route("/content", name="content")
* @param UserRepository $user
* @return Response
*/
public function index(UserRepository $user)
{
$user->findAll();
return new Response();
}
}
So, after running the content page, I got the following error: 因此,运行内容页面后,出现以下错误:
Cannot autowire service "App\\Repository\\UserRepository": argument "$uow" of method "__construct()" references class "Doctrine\\ODM\\MongoDB\\UnitOfWork" but no such service exists.
无法自动装配服务“ App \\ Repository \\ UserRepository”:方法“ __construct()”的参数“ $ uow”引用类“ Doctrine \\ ODM \\ MongoDB \\ UnitOfWork”,但不存在此类服务。
The DocumentRepository constructor looks like this: DocumentRepository构造函数如下所示:
public function __construct(DocumentManager $dm, UnitOfWork $uow, ClassMetadata $classMetadata)
{
parent::__construct($dm, $uow, $classMetadata);
}
Repository shouldn't be Services, but if you want to keep it that way, just Autowire the DocumentManager
and get the uow and classmetdata from the Document Manager. 存储库不应该是服务,但如果要保持这种状态,只需自动连接
DocumentManager
并从Document Manager中获取uow和classmetadata。
UnitOfWork
and ClassMetadata
can't be autowired UnitOfWork
和ClassMetadata
无法自动ClassMetadata
Do something like that in your UserRepository
, it should work. 在
UserRepository
执行类似的UserRepository
,它应该可以工作。
public function __construct(DocumentManager $dm)
{
$uow = $dm->getUnitOfWork();
$classMetaData = $dm->getClassMetadata(User::class);
parent::__construct($dm, $uow, $classMetaData);
}
Make sure to exclude your repository class from autowiring. 确保从自动装配中排除存储库类。 Example here: https://symfony.com/doc/current/service_container/3.3-di-changes.html
此处的示例: https : //symfony.com/doc/current/service_container/3.3-di-changes.html
In case you want your repository class as a service you should do it using a factory service. 如果您希望将存储库类作为服务,则应使用工厂服务来进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.