2016-07-29 5 views
0

私はzend-expressiveを使用しています。あるミドルウェアから別のミドルウェアにデータを渡したいと思います。例: config/routes.phpの中で私は、データベースからいくつかのデータをpreparinていると私は別のmiddelwareミドルウェア間でデータを渡す

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); 
} 

に$ itemsListを渡したいとAPI \ V1 \アクション\ ItemListActionで

[ 
    'name' => 'v1.item.list', 
    'path' => '/item', 
    'allowed_methods' => ['GET'], 
    'middleware' => [ 
     Api\V1\Action\ItemListAction::class, 
     Application\Middleware\JsonRenderMiddleware::class 
    ] 
], 

をしましたアプリケーション\ミドルウェア\ JsonRenderMiddlewareに私は、get $ itemsListをしたいと思いますし、JSON形式で返す:

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

がどのように最善の方法は何ですか?このフレームワークではcommandBusまたは他の解決策のみですか?

答えて

3

$requestの属性を使用できます。あなたはApi\V1\Action\ItemListAction

を行うことができ

$ = $要求 - > withAttribute( 'リスト'、$ itemsList)を要求します。

$ itemsList = $要求 - >のgetAttribute( 'リスト')を使用して、その後

Application\Middleware\JsonRenderMiddlewareでそれを取り出します。

このソリューションの唯一の欠点は、$requestはここに行くには、いくつかの方法があります

+0

それは動作しません:/ $ response-> getAttribute( 'list');このミドルウェアで設定した直後にも、いつでもnullを返します。 – quentino

+0

多分私はミドルウェアのアイデアを正しく理解できません。私は、いくつかのサービスチェーンのようなミドルウェアを使用して、さまざまな方法でデータを処理して、期待されるデータを受け取ることができると考えました。この場合のように、私は別のミドルウェアを使用して、 jsonやhtmlレスポンスを使用しますが、この同じミドルウェアを使用してDBからデータを取得します。 – quentino

+0

間違いがありました。 '$ response'ではなく、' getAttribute'を '$ response'で呼び出す必要があります。 – marcosh

0

list属性を持っていない場合は、2番目の1が解除されますので、あなたは、2つのミドルウェア間の依存関係を作成しているということです。

通常、あなたのアクションでZend \ Diactoros \ Response \ JsonResponseを返します。通常、そのクラスを拡張し、そのリストをより有用なものに変換したいとします。私はこのようなデータを渡す要求を使用しません。

しかし、あなたはコマンドバスを使用していることがわかります。私はまだそれを使っていませんが、https://github.com/prooph/proophessor-doを見てみたいかもしれません。それは表現力豊かなCQRSとEvent Sourcingの使い方の良い例です。

関連する問題