引用类" Doctrine \ ODM \ MongoDB \ UnitOfWork"但是没有这样的服务

时间:2018-05-08 18:59:09

标签: symfony doctrine-mongodb

我目前正在使用Symfony 4和Doctrine MongoDB Bundle,遵循此链接的说明: DoctrineMongoDBBundle。所以,我有一个UserDocument:

的src /文档/ 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 /存储库/ UserRepository.php

use Doctrine\ODM\MongoDB\DocumentRepository;
class UserRepository extends DocumentRepository
{

}

SRC /控制器/ Content.php

class Content extends Controller

{

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


}

因此,在运行内容页面后,我收到以下错误:

  

无法自动连接服务" App \ Repository \ UserRepository":参数" $ uow"方法" __ construct()"引用类" Doctrine \ ODM \ MongoDB \ UnitOfWork"但是没有这样的服务。

DocumentRepository构造函数如下所示:

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

2 个答案:

答案 0 :(得分:2)

存储库不应该是服务,但如果要保持这种状态,只需自动连接DocumentManager并从文档管理器中获取uow和classmetadata。

UnitOfWorkClassMetadata无法自动接线

在您的UserRepository中执行类似操作,应该可以。

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

答案 1 :(得分:0)

确保将您的存储库类排除在自动装配之外。示例:File::Spec

如果您希望将存储库类作为服务,则应使用工厂服务来执行此操作。