簡體   English   中英

引用類“ Doctrine \\ ODM \\ MongoDB \\ UnitOfWork”,但不存在此類服務

[英]references class “Doctrine\ODM\MongoDB\UnitOfWork” but no such service exists

我目前正在按照此鏈接的說明使用Symfony 4和Doctrine MongoDB Bundle: DoctrineMongoDBBundle 因此,我有一個UserDocument:

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

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

}

src / Controller / Content.php

類內容擴展Controller

{

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


}

因此,運行內容頁面后,出現以下錯誤:

無法自動裝配服務“ App \\ Repository \\ UserRepository”:方法“ __construct()”的參數“ $ uow”引用類“ Doctrine \\ ODM \\ MongoDB \\ UnitOfWork”,但不存在此類服務。

DocumentRepository構造函數如下所示:

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

存儲庫不應該是服務,但如果要保持這種狀態,只需自動連接DocumentManager並從Document Manager中獲取uow和classmetadata。

UnitOfWorkClassMetadata無法自動ClassMetadata

UserRepository執行類似的UserRepository ,它應該可以工作。

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

確保從自動裝配中排除存儲庫類。 此處的示例: https : //symfony.com/doc/current/service_container/3.3-di-changes.html

如果您希望將存儲庫類作為服務,則應使用工廠服務來進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM