У меня есть проект 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
. Вот почему я попробовал описанный выше метод.