Php Symfony 4自定义捆绑使用记录器接口

Php Symfony 4自定义捆绑使用记录器接口,php,symfony,dependency-injection,symfony4,Php,Symfony,Dependency Injection,Symfony4,我正在尝试实现一个自定义Symfony捆绑包,在我的服务中,我需要传递我在Symfony应用程序中定义的全局Symfony logger,它是Psr\Log\LoggerInterface的一个实例。问题是,当我使用ContainerBuilder配置服务时,记录器服务尚未初始化 在我的bundle服务中,我传递记录器的方式如下: public function __construct(LoggerInterface $logger, $argument1, $argument2); 这两个参

我正在尝试实现一个自定义Symfony捆绑包,在我的服务中,我需要传递我在Symfony应用程序中定义的全局Symfony logger,它是Psr\Log\LoggerInterface的一个实例。问题是,当我使用ContainerBuilder配置服务时,记录器服务尚未初始化

在我的bundle服务中,我传递记录器的方式如下:

public function __construct(LoggerInterface $logger, $argument1, $argument2);
这两个参数来自packages/my\u custom\u bundle\u config.yaml文件。但是,即使在上面的配置文件中,我也无法将应用程序的记录器作为参数传递

如有任何帮助或意见,将不胜感激


谢谢。

您需要做三件事:

  • 创建一个编译器过程。您可以在文档中搜索它们。基本上,它们允许您在编译容器之前修改容器,此时所有定义和别名都已注册

  • 在您的配置类中,如果您的用户想要使用不同的实现,那么为记录器定义服务id确实是一种很好的做法。在扩展类中,应该将该引用作为参数传递

  • 通常,所有依赖psr接口的捆绑包都会将其别名注册到默认实现中。它们通常被称为记录器。默认值为或类似值。您可以在monolog bundle扩展类中搜索它们使用的定义,或者使用具有别名的接口


  • 你能解释一下为什么你不能通过考试吗?你有例外吗?你能发这个消息吗?您的配置是什么样子的?