Я использую Zend-Expressive, и я хотел бы передать данные из одного промежуточного программного обеспечения в другой.
например в config / rout.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 я хотел бы получить $ itemsList и вернуть в формате json:
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
атрибут
Есть несколько способов пойти сюда.
Обычно вы возвращаете Zend \ Diactoros \ Response \ JsonResponse в вашем действии. Обычно вы хотите расширить этот класс и преобразовать этот список в нечто более полезное. Я бы не использовал этот запрос для передачи таких данных.
Однако я вижу, что вы используете командную шину. Я еще не работал с этим, но вы можете взглянуть на https://github.com/prooph/proophessor-do. Это хороший пример того, как они используют CQRS и Event Sourcing с выразительными.