Symfony 4 получает доктрину documentManger с внедрением зависимостей

Мне нужно использовать Symfony 4 и MongoDB в проекте. Я могу получить доступ к DocumentManager в контроллере следующим образом:

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

во время выполнения, но не как другие сервисы (например, Doctrine EntityManager) через аргумент любого метода или конструктора. Так что я не знаю, как добраться до него в сервисе. Если я его не пропишу в services.yaml, Symfony его не найдет, это понятно. Но если я попытаюсь зарегистрироваться:

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

он также возвращает ошибку: (1/1) Ошибка компиляции FatalErrorException: невозможно использовать «Bool» в качестве имени класса, поскольку оно зарезервировано в Bool.php (строка 26)

Кажется, что это несовместимо с php 7, что, однако, требуется для Symfony 4.

Кто-нибудь знает, как разрешить это противоречие?

Заранее спасибо!


person Attila the Hun    schedule 18.02.2018    source источник


Ответы (2)


Я нашел решение, которое может быть полезно для других: проблема не возникает с версией dev-master / 3.5.x-dev доктрины/mongodb-odm-bundle. https://packagist.org/packages/doctrine/mongodb-odm-bundle#dev-master Первоначально composer.json требовал «^3.0», поэтому композитор загрузил 3.4.1, которая была последней стабильной версией. Изменение версии на «3.5.x-dev» решило проблему, по крайней мере, для разработки.

person Attila the Hun    schedule 09.03.2018

вы можете ввести 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
    }
}
person Leonardo Beal    schedule 14.08.2019