Передача данных между промежуточным ПО

Я использую 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 или есть другое решение в этих рамках?

0

Решение

Вы можете использовать атрибуты $request,

В Api\V1\Action\ItemListAction ты мог бы сделать

$ request = $ request-> withAttribute (‘list’, $ itemsList);

а затем получить его в Application\Middleware\JsonRenderMiddleware с помощью

$ itemsList = $ request-> getAttribute (‘list’);

Единственный недостаток этого решения заключается в том, что вы создаете зависимость между двумя промежуточными программами, потому что вторая сломается, если $request не имеет list атрибут

3

Другие решения

Есть несколько способов пойти сюда.

Обычно вы возвращаете Zend \ Diactoros \ Response \ JsonResponse в вашем действии. Обычно вы хотите расширить этот класс и преобразовать этот список в нечто более полезное. Я бы не использовал этот запрос для передачи таких данных.

Однако я вижу, что вы используете командную шину. Я еще не работал с этим, но вы можете взглянуть на https://github.com/prooph/proophessor-do. Это хороший пример того, как они используют CQRS и Event Sourcing с выразительными.

0

По вопросам рекламы [email protected]