Получается, что для одного и того же класса были определены две службы.
Одна служба была определена вручную в services.yml с идентификатором службы 'service'.Определение сервисов вручную было единственным способом определения сервисов еще во времена Symfony 2.x.
Затем появился autowire и в основном определяет сервисы с идентификаторами их имен классов.Мы смогли убедиться, что это действительно проблема, используя «bin / console debug: container».Это является следствием обновления до Symfony 3.4+ и включения autowire.
Помимо создания сервисов, autowire также позволяет вводить сервис, печатая на клавиатуре имя класса.Если в контейнере найден соответствующий идентификатор сервиса, то сервис внедряется.Таким образом, в этом случае расширение ветки, вероятно, было изменено на использование ввода текста, в то время как контроллер использует $ container-> get, что привело к внедрению двух разных сервисов.Или, возможно, наоборот.
Одним из исправлений было бы использование псевдонима:
# services.yml
MyServiceClassName: service
Псевдоним в основном подавляет автоматическое создание второго сервиса.
A "Лучшим подходом (или наименее рекомендуемым) было бы прекратить использование $ container-> get и просто внедрить службу там, где это необходимо.Затем вы бы полностью отбросили определение 'service'.
В качестве последнего замечания: если бы самой службе потребовались какие-либо аргументы конструктора масштабирующего устройства (строки или целые числа), процесс autowire завершился бы ошибкой с сообщением об ошибке.Эти ошибки могут поначалу приводить в замешательство, поскольку у вас уже определен работающий сервис, но из-за того, что идентификатор сервиса отличается, autowire просто пашет вперед и пытается создать новый.