Symfony 参考类“;条令\ODM\MongoDB\UnitOfWork“;但不存在这样的服务

Symfony 参考类“;条令\ODM\MongoDB\UnitOfWork“;但不存在这样的服务,symfony,doctrine-mongodb,Symfony,Doctrine Mongodb,我目前正在使用Symfony 4和Doctrine MongoDB捆绑包,遵循此链接中的说明: . 因此,我有一个用户文档: src/Document/UserDocument.php /** @MongoDB\Document(collection="user", repositoryClass="App\Repository\UserRepository") */ class UserDocument { /** * @MongoDB\Id * @var Obj

我目前正在使用Symfony 4和Doctrine MongoDB捆绑包,遵循此链接中的说明: . 因此,我有一个用户文档:

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;
    }
use Doctrine\ODM\MongoDB\DocumentRepository;
class UserRepository extends DocumentRepository
{

}
src/Repository/UserRepository.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;
    }
use Doctrine\ODM\MongoDB\DocumentRepository;
class UserRepository extends DocumentRepository
{

}
src/Controller/Content.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;
    }
use Doctrine\ODM\MongoDB\DocumentRepository;
class UserRepository extends DocumentRepository
{

}
类内容扩展控制器

{

    /**
     * @Route("/content", name="content")
     * @param UserRepository $user
     * @return Response
     */
    public function index(UserRepository $user)
    {
        $user->findAll();
        return new Response();
    }


}
因此,在运行内容页之后,我得到了以下错误:

无法自动连线服务“App\Repository\UserRepository”:方法“\uu construct()”的参数“$uow”引用类“Doctrine\ODM\MongoDB\UnitOfWork”,但不存在此类服务

DocumentRepository构造函数如下所示:

public function __construct(DocumentManager $dm, UnitOfWork $uow, ClassMetadata $classMetadata)
    {
        parent::__construct($dm, $uow, $classMetadata);
    }

确保从自动关联中排除存储库类。示例如下:


如果您希望将存储库类作为服务,您应该使用factory服务来完成此操作。

请确保将存储库类从自动关联中排除。示例如下:


如果您希望将存储库类作为服务,您应该使用factory服务来完成此操作。

存储库不应该是服务,但如果您希望保持这种方式,只需自动连接
DocumentManager
,并从Document Manager获取uow和classmetdata

UnitOfWork
ClassMetadata
不能自动连线

UserRepository
中执行类似操作,应该可以正常工作

public function __construct(DocumentManager $dm)
{
    $uow = $dm->getUnitOfWork();
    $classMetaData = $dm->getClassMetadata(User::class);
    parent::__construct($dm, $uow, $classMetaData);
}

存储库不应该是服务,但如果您想保持这种方式,只需自动连接
DocumentManager
,并从DocumentManager获取uow和classmetdata

UnitOfWork
ClassMetadata
不能自动连线

UserRepository
中执行类似操作,应该可以正常工作

public function __construct(DocumentManager $dm)
{
    $uow = $dm->getUnitOfWork();
    $classMetaData = $dm->getClassMetadata(User::class);
    parent::__construct($dm, $uow, $classMetaData);
}

早就解决了,就像你的答案一样。顺便说一句,谢谢。早就解决了,就像你的答案一样。顺便说一句,谢谢。