1

私は 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 で $itemsList を取得し、json 形式で返します。

public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
{
    return new JsonResponse($itemsList);
}

最善の方法は?commandBus のみですか、それともこのフレームワークの他のソリューションですか?

4

2 に答える 2

3

の属性を使用できます$request

あなたApi\V1\Action\ItemListActionができること

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

そして、それをApplication\Middleware\JsonRenderMiddleware使用して取得します

$itemsList = $request->getAttribute('list');

このソリューションの唯一の欠点は、2 つのミドルウェア間に依存関係を作成していることです。属性$requestがない場合、2 番目のミドルウェアが破損するためです。list

于 2016-07-29T14:02:41.403 に答える