Symfony 3, один сервис, несколько репозиториев, как прописать в services.yml?

Для привязки сервиса к нескольким репозиториям в Symfony 3, вы можете использовать теговую конфигурацию в файле services.yml. Вот как это можно сделать:

1. Создайте сервис в файле services.yml:

services:
    app.my_service:
        class: AppBundleServiceMyService
        arguments:
            - '@doctrine.orm.entity_manager'
            - [ '@app.my_repository1', '@app.my_repository2' ]

Этот код создаст сервис app.my_service, которому в качестве аргументов передаются Doctrine EntityManager и массив из двух репозиториев app.my_repository1 и app.my_repository2.

2. Определите репозитории в файле services.yml:

services:
    app.my_repository1:
        class: AppBundleRepositoryMyRepository1
        arguments:
            - '@doctrine.orm.entity_manager'
            - '@doctrine.orm.default_entity_manager'
    
    app.my_repository2:
        class: AppBundleRepositoryMyRepository2
        arguments:
            - '@doctrine.orm.entity_manager'
            - '@doctrine.orm.default_entity_manager'

В этом коде создаются два репозитория: app.my_repository1 и app.my_repository2, которые принимают Doctrine EntityManager в качестве аргументов.

3. Для использования созданных сервисов в вашем сервисе MyService вы должны применить аннотацию @required и соответствующие аргументы в конструкторе:

namespace AppBundleService;

use DoctrineORMEntityManagerInterface;
use AppBundleRepositoryMyRepository1;
use AppBundleRepositoryMyRepository2;

class MyService
{
    private $entityManager;
    private $repository1;
    private $repository2;

    public function __construct(EntityManagerInterface $entityManager, MyRepository1 $repository1, MyRepository2 $repository2)
    {
        $this->entityManager = $entityManager;
        $this->repository1 = $repository1;
        $this->repository2 = $repository2;
    }
    
    // ...
}

Теперь у вас есть сервис MyService, который принимает Doctrine EntityManager и два репозитория в качестве аргументов. Вы можете использовать сервис MyService в других частях вашего приложения и получить доступ к нескольким репозиториям для выполнения своей логики.