Как инжектить класс из одного бандла внутри сервиса другого бандла?
У меня существует два кастомных бандла симфони, оба подключаются к основному проекту, и как проект, так и один из бандлов используют методы второго бандла. Первый бандл это мессенджер, второй - логгер, соответственно методы логгера используются в мессенджере. При попытке в сервисе мессенджера сделать следующее:
public function __construct(string $apiUrl, LogService $logger)
получаю ошибку
Too few arguments to function Acme\NotifierBundle\Service\NotificationService::__construct(), 1 passed in /var/cache/dev/Container51Q3Syr/getAppControllerService.php on line 26 and exactly 2 expected
Если правильно понимаю, первый аргумент приходит нормально из .yaml, а второй нет.
Оба бандла конфигурируются своими ямлами. Как здесь правильно поступить, что необходимо сделать, чтобы не делать new LogService::class, а именно передавать LogService как аргумент в __construct()?
Ответы (1 шт):
Попробуйте так: для LogService в файле сервисов приложения задать алиас(эдакий мост)
#config/services.yaml
services:
my.logger: '@неймспейс\LogService'
а в конфигурации бандла, в сервисе где этот логгер инжектится явно указать:
#bundle/Resources/config/services.yaml
services:
first_bundle_service:
class: Неймспейс\Класс
arguments:
$apiUrl: 'https://url...'
$logger: '@my.logger'
PS: ну и желательно не использовать в бандле такую жесткую зависимость от LoggerService, а сделать так, например, чтобы LoggerService реализовывал бы Psr\Log\LoggerInterface (psr-3) и в зависимостях указывать этот интерфейс.