ссылается на класс "Doctrine \ ODM \ MongoDB \ UnitOfWork", но такой службы не существует - PullRequest
0 голосов
/ 08 мая 2018

В настоящее время я использую 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

Класс Content расширяет контроллер

{

    /**
     * @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 голосов
/ 07 декабря 2018

Репозиторий не должен быть Службами, но если вы хотите сохранить его таким образом, просто запишите DocumentManager в автоматическом режиме и получите данные uow и classmetd из Document Manager.

UnitOfWork и ClassMetadata не могут быть автоматически подключены

Сделайте что-то подобное в вашем UserRepository, оно должно работать.

public function __construct(DocumentManager $dm)
{
    $uow = $dm->getUnitOfWork();
    $classMetaData = $dm->getClassMetadata(User::class);
    parent::__construct($dm, $uow, $classMetaData);
}
0 голосов
/ 09 мая 2018

Убедитесь, что ваш класс хранилища исключен из автопроводки. Пример здесь: https://symfony.com/doc/current/service_container/3.3-di-changes.html

Если вы хотите, чтобы ваш класс хранилища использовался в качестве службы, вы должны сделать это с помощью фабричной службы.

...