Doctrine Настройка фабрики менеджера сущностей ORM - PullRequest
1 голос
/ 16 января 2020

У меня есть проект Symfony 2.1, который я переписываю в Symfony 5, чтобы отточить свое мастерство в новой версии фреймворка.

Мне нужно настроить сущность Doctrine Менеджер, так что AutoWiring может позаботиться об этом:

public function __construct(EntityManager $entityManager, LoggerInterface $logger, array $options = [])
{
    // my constructor
}

Я дошел до этого:

# config/services.yaml
parameters:
    doctrine.orm.entitymanager.factory: Doctrine\ORM\EntityManager

services:
    _defaults:
        autowire: true
        autoconfigure: true

    #other settings

    Doctrine\ORM\EntityManager:
        class: Doctrine\ORM\EntityManager
        factory:   ["%doctrine.orm.entitymanager.factory%", "create"]
        arguments:
            $connection: "%doctrine.default_connection%"
            $config: ""
        public: true

    Doctrine\ORM\EntityManagerInterface: '@Doctrine\ORM\EntityManager'

Но я могу за свою жизнь не понять, что я должен сделать, чтобы заставить это работать. Проблема в том, что я не знаю / не понимаю, каким должен быть аргумент $config. Если это пустая строка, мне выдается следующая ошибка:

Невозможно автоматически подключить службу "Doctrine \ ORM \ EntityManager": аргумент "$ config" метода "create ()" ссылается на класс "Doctrine \ ORM \ Configuration ", но такой службы не существует.

Как настроить переменную $config?

РЕДАКТИРОВАТЬ 1:

Если я удаляю все проводки, которые я сделал в services.yaml:

// this is my whole services.yaml file at the moment
services:
    _defaults:
        autowire: true
        autoconfigure: true
Nexus\:
    resource: '../src/*'
    exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

Nexus\Controllers\:
    resource: '../src/Controllers'
    tags: ['controller.service_arguments']

, я получаю следующую ошибку:

Невозможно автоматически подключить службу "Nexus \ Services \ FederatedConnectionService": аргумент «$ em» метода «__construct ()» ссылается на интерфейс «Doctrine \ ORM \ EntityManagerInterface», но такой службы не существует. Вы создали класс, который реализует этот интерфейс?

Итак, чтобы решить эту проблему, я добавил следующее в services: в services.yaml:

Doctrine\ORM\EntityManager: ~
Doctrine\ORM\EntityManagerInterface: '@Doctrine\ORM\EntityManager'

И это дает мне следующая ошибка:

Неверный сервис "Doctrine \ ORM \ EntityManager": его конструктор должен быть опубликован c.

Когда я проверяю конструктор EntityManager Это protected. Вот почему я попробовал описанный выше метод.

...