在中间件之间传递数据
Passing data between middelware
我使用 zend-expressive,我想将数据从一个中间件传递到另一个中间件。
例如在 config/routes.php 我
[
'name' => 'v1.item.list',
'path' => '/item',
'allowed_methods' => ['GET'],
'middleware' => [
Api\V1\Action\ItemListAction::class,
Application\Middleware\JsonRenderMiddleware::class
]
],
在 Api\V1\Action\ItemListAction 我正在准备一些来自数据库的数据,我想将 $itemsList 传递给另一个中间件
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
{
$parameters = new ListParameters($request->getQueryParams());
$itemsList = $this->commandBus->handle(new ItemListCommand($parameters));
return $next($request, $response);
}
并在 Application\Middleware\JsonRenderMiddleware 中,我想以 json 格式获取 $itemsList 和 return:
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
{
return new JsonResponse($itemsList);
}
如何是最好的方法?仅 commandBus 还是此框架中的其他解决方案?
您可以使用 $request
的属性。
在Api\V1\Action\ItemListAction
你可以做到
$request = $request->withAttribute('list', $itemsList);
然后使用
在Application\Middleware\JsonRenderMiddleware
中检索它
$itemsList = $request->getAttribute('list');
此解决方案的唯一缺点是您在两个中间件之间创建了依赖关系,因为如果 $request
没有 list
属性[=15=,第二个就会中断]
这里有几种方法。
通常你会 return 一个 Zend\Diactoros\Response\JsonResponse 在你的行动中。通常您希望扩展 class 并将该列表转换为更有用的内容。我不会使用请求来传递这样的数据。
不过我看到您使用的是命令总线。我还没有使用过它,但你可能想看看 https://github.com/prooph/proophessor-do。这是一个很好的例子,说明他们如何使用 CQRS 和具有表现力的事件源。
我使用 zend-expressive,我想将数据从一个中间件传递到另一个中间件。 例如在 config/routes.php 我
[
'name' => 'v1.item.list',
'path' => '/item',
'allowed_methods' => ['GET'],
'middleware' => [
Api\V1\Action\ItemListAction::class,
Application\Middleware\JsonRenderMiddleware::class
]
],
在 Api\V1\Action\ItemListAction 我正在准备一些来自数据库的数据,我想将 $itemsList 传递给另一个中间件
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
{
$parameters = new ListParameters($request->getQueryParams());
$itemsList = $this->commandBus->handle(new ItemListCommand($parameters));
return $next($request, $response);
}
并在 Application\Middleware\JsonRenderMiddleware 中,我想以 json 格式获取 $itemsList 和 return:
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
{
return new JsonResponse($itemsList);
}
如何是最好的方法?仅 commandBus 还是此框架中的其他解决方案?
您可以使用 $request
的属性。
在Api\V1\Action\ItemListAction
你可以做到
$request = $request->withAttribute('list', $itemsList);
然后使用
在Application\Middleware\JsonRenderMiddleware
中检索它
$itemsList = $request->getAttribute('list');
此解决方案的唯一缺点是您在两个中间件之间创建了依赖关系,因为如果 $request
没有 list
属性[=15=,第二个就会中断]
这里有几种方法。
通常你会 return 一个 Zend\Diactoros\Response\JsonResponse 在你的行动中。通常您希望扩展 class 并将该列表转换为更有用的内容。我不会使用请求来传递这样的数据。
不过我看到您使用的是命令总线。我还没有使用过它,但你可能想看看 https://github.com/prooph/proophessor-do。这是一个很好的例子,说明他们如何使用 CQRS 和具有表现力的事件源。