基于https://github.com/DamienHarper/DoctrineAuditBundle,我正在尝试为Zend Expressive应用程序开发审核模块。 但是我不知道如何在审核逻辑中获取用户数据(id)。
我看到$user
作为请求属性传递给
vendor/zendframework/zend-expressive-authentication/src/AuthenticationMiddleware.php
,但是无法通过
$container->get(\Psr\Http\Message\ServerRequestInterface::class)->getAttribute(\Zend\Expressive\Authentication\UserInterface::class);
答案 0 :(得分:1)
您可能想重新阅读concept of middleware。简而言之,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
之后从请求中抓住用户并将其注入到Audit模块中。