我目前正在使用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);
}
答案 0 :(得分:2)
存储库不应该是服务,但如果要保持这种状态,只需自动连接DocumentManager
并从文档管理器中获取uow和classmetadata。
UnitOfWork
和ClassMetadata
无法自动接线
在您的UserRepository
中执行类似操作,应该可以。
public function __construct(DocumentManager $dm)
{
$uow = $dm->getUnitOfWork();
$classMetaData = $dm->getClassMetadata(User::class);
parent::__construct($dm, $uow, $classMetaData);
}
答案 1 :(得分:0)
确保将您的存储库类排除在自动装配之外。示例:File::Spec
如果您希望将存储库类作为服务,则应使用工厂服务来执行此操作。