У меня есть следующая настройка в проекте Slim PHP с использованием Monolog для ведения журнала, но я не могу войти из промежуточного программного обеспечения.
В зависимостях.php у меня есть
$container['logger'] = function ($c) {
$settings = $c->get('settings')['logger'];
$logger = new Monolog\Logger($settings['name']);
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
$logger->pushHandler(new Monolog\Handler\StreamHandler($settings['path'], $settings['level']));
return $logger;
};
Затем в middleware.php у меня есть
use App\Middleware\Logging;
$app->add(new Logging($container->logger));
С App \ Middleware \ Logging:
<?php
namespace App\Middleware;
class Logging
{
public function __construct($logger)
{
$this->logger = $logger;
}
public function __invoke($request, $response, $next)
{
$routeParams = $request->getAttribute('routeInfo')[2];
$this->logger->info($request->getMethod() . " -- " . $request->getUri());
return $next($request, $response);
}
}
Как я могу затем войти в систему из другого файла промежуточного программного обеспечения?
У меня также есть приложение / промежуточное ПО / CacheMiddleware
<?php
namespace App\Middleware;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
class CacheMiddleware
{
public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next)
{
//$this->logger->info('test');
$response->getBody()->write('BEFORE');
return $next($request, $response);
}
}
Но выдает ошибку Call to a member function info() on null
Любая помощь была бы замечательной.
Спасибо






В вашем коде класс CacheMiddleware не имеет члена $logger. В классе Logging вы передаете экземпляр регистратора в конструктор и соответственно устанавливаете $this->logger, но в CacheMiddleware вы этого не делаете.
Сделайте то же самое в другом классе:
class CacheMiddleware
{
public function __construct($logger)
{
$this->logger = $logger;
}
// rest of class definition
}
и когда вы добавляете новый экземпляр CacheMiddleware в промежуточное ПО приложения, передайте $container['logger'] конструктору, как вы это делали с $app->add(new Logging($container->logger));:
$app->add(new CacheMiddleware($container->logger));