symfony 4 使用依赖注入获取学说 documentManger

symfony 4 get doctrine documentManger with dependency injection

我必须在项目中使用 Symfony 4 和 MongoDB。我可以像这样访问控制器中的 DocumentManager:

$dm = $this->get('doctrine_mongodb')->getManager();

在运行时,但不像其他服务(例如 Doctrine EntityManager)通过任何方法或构造函数的参数。所以我不知道如何在服务中达到它。 如果我不在services.yaml里注册,Symfony 是找不到的,很清楚。但是如果我尝试注册:

Doctrine\:
    resource: '../vendor/doctrine/mongodb-odm/lib/Doctrine/*'

它 returns 也是一个错误: (1/1) 致命错误异常 编译错误:无法将 'Bool' 用作 class 名称,因为它已保留 在 Bool.php(第 26 行)

它似乎与 php 7 不兼容,但是 Symfony 4 需要什么。

有谁知道如何解决这个矛盾?

提前致谢!

我找到了一个解决方案,可能对其他人有用: dev-master / 3.5.x-dev 版本 doctrine/mongodb-odm-bundle 不会出现此问题。 https://packagist.org/packages/doctrine/mongodb-odm-bundle#dev-master 最初 composer.json 需要“^3.0”,所以作曲家下载了 3.4.1,这是最新的稳定版本。将版本修改为“3.5.x-dev”至少解决了开发问题。

您可以注入 ManagerRegistry 并从中获取管理器

<?php

use Doctrine\Bundle\MongoDBBundle\ManagerRegistry;

class SomeController
{
    public function someAction(ManagerRegistry $managerRegistry)
    {
        $user = new Object();
        $user->setName("John");

        $dm = $managerRegistry->getManager();

        $dm->persist($user);
        $dm->flush();
       //do something
    }
}