如何在 Zend Expressive 的 Doctrine 事件订阅者中获取用户对象
How to get User object in Doctrine event subscriber in Zend Expressive
基于 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);
您可能想再次阅读有关 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
之后的请求中获取用户并将其注入到您的审计模块中。
基于 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);
您可能想再次阅读有关 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
之后的请求中获取用户并将其注入到您的审计模块中。