В общем, если вы хотите перейти на Symfony 4, у вас больше не будет таких сервисов, как:
services:
some.service:
class: AppBundle\SomeService
...
Вы должны изменить это на:
services:
AppBundle\SomeService:
...
Но что происходит, когда у вас есть несколько определений для одного и того же класса? Например:
services:
some.service1:
class: AppBundle\SomeService
...
some.service2:
class: AppBundle\SomeService
...
some.service3:
class: AppBundle\SomeService
...
Все они используют один и тот же класс SomeService, но имеют разные конфигурации, поэтому в зависимости от ваших потребностей вы можете вызвать some.service1, some.service2 или some.service3. Теперь, как этот файл services.yml будет изменен в соответствии со стандартами Symfony 4? Потому что, если вы сделаете что-то вроде:
services:
AppBundle\SomeService:
...
AppBundle\SomeService:
...
AppBundle\SomeService:
...
Он просто переопределит ваши предыдущие объявления и сохранит только последнее.
Любое решение?
Я думаю, вы можете неправильно понять несколько вещей. Вы действительно все еще можете определять службы в соответствии с вашим первым примером. Использование имени класса в качестве идентификатора службы позволяет autowire творить чудеса. Но если у вас есть более одной реализации для каждого класса, тогда идентификаторы служб старого стиля подойдут, и вам просто нужно вручную подключить их при инъекции.
@Cerad ваш комментарий должен быть ответом ИМХО
Немного не по теме, но во многих случаях, когда у вас есть несколько сервисов для одного класса, может быть лучше создать класс SomeServiceFactory и внедрить его. Просто зависит от варианта использования.






Вы все еще можете использовать псевдоним для определение услуг ...