Symfony 4 Custom Bundle使用Logger界面

时间:2018-09-10 16:09:25

标签: php symfony dependency-injection symfony4

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

在捆绑服务中,我像这样传递记录器:

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

这两个参数是从packages / my_custom_bundle_config.yaml文件传递的。但是,即使在上述配置文件中,我也无法将应用程序的记录器作为参数传递。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要做三件事:

  1. 创建一个编译器通道。您可以在文档中搜索它们。基本上,它们允许您在所有定义和别名均已注册后,在编译容器之前对其进行修改。

  2. 在您的配置类中,为您的记录器定义服务ID确实是一种很好的做法,以防您的用户想要使用其他实现。在扩展类中,您应该将该引用作为参数传递。

  3. 通常,所有依赖psr接口的捆绑软件都会将其别名注册为默认实现。它们通常称为 logger.default 或类似名称。您可以在monolog包扩展类中搜索它们使用的定义或使用具有别名的接口。