2017-05-25 46 views
0

我想解释如何在最新版本的zend-mvc下正确地混合ZF3中间件之间的变量。使用zend-mvc在中间件之间传递变量

想像这样一个路径:

'sandwich-test' => [ 
    'type' => \Zend\Router\Http\Literal::class, 
    'options' => [ 
     'route' => '/events/sandwich', 
     'defaults' => [ 
      'middleware' => [ 
       \Foo\Middleware\JsonWrappingMiddleware::class, 
       \Foo\Middleware\TestMiddleware::class, 
      ], 
     ], 
    ], 
], 

在我简单的测试,我想为JsonWrappingMiddleware简单地在JsonResponse返回,由TestMiddleware返回的变量。

独立,这个工程:

use Interop\Http\ServerMiddleware\DelegateInterface; 
use Interop\Http\ServerMiddleware\MiddlewareInterface; 
use Psr\Http\Message\ServerRequestInterface; 
use Zend\Diactoros\Response\JsonResponse; 

class JsonWrappingMiddleware implements MiddlewareInterface 
{ 
    public function process(ServerRequestInterface $request, DelegateInterface $delegate) 
    { 

     return new JsonResponse(['c' => 'd']); 
    } 
} 

......还有......

use Interop\Http\ServerMiddleware\DelegateInterface; 
use Interop\Http\ServerMiddleware\MiddlewareInterface; 
use Psr\Http\Message\ServerRequestInterface; 
use Zend\Diactoros\Response\JsonResponse; 

class TestMiddleware implements MiddlewareInterface 
{ 
    public function process(ServerRequestInterface $request, DelegateInterface $delegate) 
    { 
     return new JsonResponse(['a' => 'b']); 
    } 
} 

不过,如何让他们一起工作,返回

[ 'a' => 'b', 'c' => 'd', ] 

回答

0

你是发送响应两次,如果你想要一个中间件传递一些数据,然后使用$request->withAttribute($name, $value): RequestInterface然后在第二个(或只是最后一个)中间件获取该数据并将其转换为正确的JsonResponse

+0

嗨。我理解返回的概念,但我不知道如何将这两者结合起来以获得理想的结果。如果你有时间的话,代码示例会很棒。 – Saeven