我想让Psr\Log\LoggerInterface
在symfony中公开,以便能够直接从$container->get('Psr\Log\LoggerInterface')
容器中获取它。
我尝试了以下services.yaml
:
_defaults:
public: true
Psr\Log\LoggerInterface:
public: true
Psr\Log\LoggerInterface:
alias: 'logger'
public: true
Psr\Log\LoggerInterface:
alias: 'monolog.logger'
public: true
我不明白为什么重写一个服务是如此困难。
3条答案
按热度按时间5n0oy7gb1#
如前所述,不鼓励直接从容器访问服务。但我有点好奇,想知道如何将私人服务公之于众。我尝试了问题中列出的方法,并确认它不起作用。
这可能不是最简单的方法,但编译器传递可以做到这一点:
请注意,只有注入了完整容器的服务才能利用这一点。从AbstractController扩展的控制器只能访问少量的服务。
如果您需要在控制器中使用日志记录器,或者您只是想要一种“更好”的方式来完成此操作,请查看服务订阅者。
czq61nw12#
我不确定这对您的情况是否有帮助,但在我的情况下,我需要在测试中使用
monolog.logger
服务的公共版本来模拟它。所以我创建了一个公共别名:现在,当我使用带有
LoggerInterface
类的DI注入这个服务时,我得到了这个服务,我在测试中模拟了这个服务:4nkexdtk3#
使用**$container->get()**是一种不好的做法。它违反了许多好的软件设计原则。
你应该使用构造函数注入。