Symfony 4 Custom Bundle использует интерфейс Logger - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь реализовать пользовательский пакет Symfony, и внутри моего сервиса мне нужно передать глобальный регистратор Symfony, который я определил в своем приложении Symfony, и это экземпляр Psr \ Log \ LoggerInterface. Проблема заключается в том, что когда я настраиваю свои службы с помощью ContainerBuilder, служба ведения журнала еще не инициализируется.

В моем пакете услуг я передаю регистратор следующим образом:

public function __construct(LoggerInterface $logger, $argument1, $argument2);

Два аргумента доставляются из файла packages / my_custom_bundle_config.yaml. Однако я не могу передать регистратор приложения в качестве параметра даже в приведенном выше конфигурационном файле.

Любая помощь или любые комментарии будут высоко оценены.

Спасибо.

1 Ответ

0 голосов
/ 11 сентября 2018

Вам нужно сделать три вещи:

  1. Создать проход компилятора. Вы можете найти их в документации. По сути, они позволяют изменять контейнер непосредственно перед его компиляцией, когда все определения и псевдонимы зарегистрированы.

  2. Это действительно хорошая практика в вашем классе конфигурации для определения идентификатора службы для регистратора на тот случай, если ваши пользователи захотят использовать другую реализацию. В вашем классе расширения вы должны передать эту ссылку в качестве аргумента.

  3. Обычно все пакеты, использующие интерфейсы psr, регистрируют его псевдоним для реализации по умолчанию. Их обычно называют logger.default или что-то подобное. Вы можете искать в классе расширений монологического пакета определения, которые они используют, или интерфейс, который будет иметь псевдоним.

...