Я пытаюсь реализовать собственный пакет Symfony, и внутри моего сервиса мне нужно передать глобальный логгер Symfony, который я определил в своем приложении Symfony, и это экземпляр Psr \ Log \ LoggerInterface. Проблема в том, что когда я настраиваю свои службы с помощью ContainerBuilder, служба регистратора еще не инициализирована.
В моем пакете услуг я передаю Регистратору вот так:
public function __construct(LoggerInterface $logger, $argument1, $argument2);
Два аргумента доставляются из файла packages / my_custom_bundle_config.yaml. Однако я не могу передать регистратор приложения в качестве параметра даже в приведенном выше файле конфигурации.
Будем очень признательны за любую помощь или комментарии.
Спасибо.
Вам нужно сделать три вещи:
Создайте проход компилятора. Вы можете поискать их в документации. По сути, они позволяют вам изменять контейнер непосредственно перед его компиляцией, когда все определения и псевдонимы были зарегистрированы.
Это действительно хорошая практика в вашем классе конфигурации, чтобы определить идентификатор службы для регистратора, если ваши пользователи хотят использовать другую реализацию. В вашем классе расширения вы должны передать эту ссылку в качестве аргумента.
Обычно все пакеты, которые полагаются на интерфейсы psr, регистрируют его псевдоним для реализации по умолчанию. Их обычно называют logger.default или что-то подобное. Вы можете искать в классе расширения пакета monolog определения, которые они используют, или использовать интерфейс, у которого будет псевдоним.
Можете уточнить, почему вы не можете пройти регистратор? У вас есть исключение? Вы можете отправить сообщение? Как выглядит ваша конфигурация?