我正在尝试实现自定义的Symfony捆绑包,并且在我的服务中,我需要传递在我的Symfony App中定义的全局symfony记录器,它是Psr \ Log \ LoggerInterface的一个实例。问题是,当我使用ContainerBuilder配置服务时,记录器服务尚未初始化。
在捆绑服务中,我像这样传递记录器:
public function __construct(LoggerInterface $logger, $argument1, $argument2);
这两个参数是从packages / my_custom_bundle_config.yaml文件传递的。但是,即使在上述配置文件中,我也无法将应用程序的记录器作为参数传递。
任何帮助或任何评论将不胜感激。
谢谢。
答案 0 :(得分:0)
您需要做三件事:
创建一个编译器通道。您可以在文档中搜索它们。基本上,它们允许您在所有定义和别名均已注册后,在编译容器之前对其进行修改。
在您的配置类中,为您的记录器定义服务ID确实是一种很好的做法,以防您的用户想要使用其他实现。在扩展类中,您应该将该引用作为参数传递。
通常,所有依赖psr接口的捆绑软件都会将其别名注册为默认实现。它们通常称为 logger.default 或类似名称。您可以在monolog包扩展类中搜索它们使用的定义或使用具有别名的接口。