我有一个 Slim Php (slim4) 应用程序,我在其中添加了 Monolog 以进行日志记录。我将记录器添加到应用程序中,如下所示:
$containerBuilder->addDefinitions([
LoggerInterface::class => function (ContainerInterface $c) {
$logger = new Logger('appname');
...
return $logger
这适用于在我的大多数课程中注入记录器,只需执行以下操作:
public function __construct(ContainerInterface $container = null, LoggerInterface $logger)
{
// I can use $logger here
现在我还想在中间件中使用记录器,如身份验证。我不知道如何正确地做到这一点。我可以通过将记录器添加为容器中的命名条目来实现此功能,如下所示:
$containerBuilder->addDefinitions([
"LoggerInterface" => function (ContainerInterface $c) {
然后通过从容器中取回它作为构造函数参数将其传递给中间件:
$middlewares[] = new MyAuthentication(..., $container->get('LoggerInterface'));
但是这个:
- a) 按类名中断其他类的注入
- b) 显然不是最佳实践
那么将这个记录器注入中间件的正确方法是什么?