Как объявить сервисы в Symfony 4, когда класс может иметь несколько определений

В общем, если вы хотите перейти на 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:
        ...

Он просто переопределит ваши предыдущие объявления и сохранит только последнее.

Любое решение?

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

Jack Skeletron 14.05.2018 16:23

Я думаю, вы можете неправильно понять несколько вещей. Вы действительно все еще можете определять службы в соответствии с вашим первым примером. Использование имени класса в качестве идентификатора службы позволяет autowire творить чудеса. Но если у вас есть более одной реализации для каждого класса, тогда идентификаторы служб старого стиля подойдут, и вам просто нужно вручную подключить их при инъекции.

Cerad 14.05.2018 16:28

@Cerad ваш комментарий должен быть ответом ИМХО

Francesco Abeni 14.05.2018 20:42

Немного не по теме, но во многих случаях, когда у вас есть несколько сервисов для одного класса, может быть лучше создать класс SomeServiceFactory и внедрить его. Просто зависит от варианта использования.

Cerad 15.05.2018 01:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
472
0

Другие вопросы по теме