【问题标题】:Passing variables between Middlewares using zend-mvc使用 zend-mvc 在中间件之间传递变量
【发布时间】:2017-10-26 14:05:37
【问题描述】:

我正在尝试破译如何在最新版本的 zend-mvc 下正确混合 ZF3 中间件之间的变量。

想象一下这样的路线:

'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', ]

【问题讨论】:

  • 你知道如何让中间件协同工作吗?

标签: zend-framework3 zend-framework-mvc mezzio


【解决方案1】:

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

【讨论】:

  • 嗨。我理解返回的概念,但我不确定如何将这两者结合起来以获得预期的结果。如果你有时间,一个代码示例会很棒。
猜你喜欢
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多