У меня есть приложение 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'));
Но это:
- а) прерывает инъекцию по имени класса для других классов
- б) очевидно не рекомендуется
Итак, как правильно внедрить этот регистратор в промежуточное ПО?