Symfony 4 Custom Bundle使用Logger Interface

问题描述 投票:3回答:1

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

在我的捆绑服务中,我正在传递Logger,如下所示:

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

这两个参数是从packages / my_custom_bundle_config.yaml文件中提供的。但是,即使在上面的配置文件中,我也无法将App的Logger作为参数传递。

任何帮助或任何评论将不胜感激。

谢谢。

php symfony dependency-injection symfony4
1个回答
0
投票

您需要做三件事:

  1. 创建编译器传递。您可以在文档中搜索它们。基本上,它们允许您在编译容器之前修改容器,此时所有定义和别名都已注册。
  2. 如果您的用户想要使用不同的实现,那么在您的配置类中定义服务器ID是非常好的做法。在扩展类中,您应该将该引用作为参数传递。
  3. 通常,所有依赖psr接口的bundle都会将其别名注册到默认实现。它们通常被称为logger.default或类似的东西。您可以在monolog包扩展类中搜索它们使用的定义,也可以使用具有别名的接口。
© www.soinside.com 2019 - 2024. All rights reserved.