Возможно, вы захотите еще раз прочитать о концепции промежуточного программного обеспечения .Вкратце, expressive имеет стек промежуточного программного обеспечения и, в зависимости от запроса, отправляет запрос через определенные уровни промежуточного программного обеспечения.
В вашем примере запрос проходит через AuthenticationMiddleware.Поэтому, если у вас есть это в качестве конвейера:
$app->pipe(AuthenticationMiddleware::class);
$app->pipe(AuditMiddleware::class);
Запрос сначала проходит через AuthenticationMiddleware, который делает UserInterface доступным в запросе, а затем через AuditMiddleware.
В вашем AuditMiddleware и всем промежуточном программном обеспечении после AuthenticationMiddleware вы можете получить доступ к UserInterface следующим образом:
function (ServerRequestInterface $request, RequestHandlerInterface $handler)
{
$user = $request->getAttribute(UserInterface::class);
// Do stuff here
return $handler->handle($request);
}
Так что в вашем случае вам, вероятно, нужно написать AuditMiddleware
, который захватывает пользователя иззапрос после AuthenticationMiddleware
и вставляет его в ваш модуль аудита.