Для привязки сервиса к нескольким репозиториям в 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
в других частях вашего приложения и получить доступ к нескольким репозиториям для выполнения своей логики.