首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Zend\Http\Client作为用于Zend表达的PSR-7中间件

Zend\Http\Client作为用于Zend表达的PSR-7中间件
EN

Stack Overflow用户
提问于 2016-06-20 09:10:47
回答 2查看 588关注 0票数 0

我们应该如何添加Zend\Http\Client (或其他模块)作为PSR-7中间件?

首先我想是:

诉讼案件

  • 加工厂
  • 注入Zend\Http\Client实例
  • 在操作中使用Zend\Http\Client实例,如$client->request('GET');

但我不确定这是否正确。它应该实现MiddlewareInterface并提供一个__invoke方法吗?

编辑:感谢@xtreamwayz和@timdev https://stackoverflow.com/a/37928824/3411766 https://stackoverflow.com/a/37934597/3411766

所以我要利用这个客户。正如@timdex通过工厂所提到的那样,通过容器获得它-> get。谢谢双方=)

EN

回答 2

Stack Overflow用户

发布于 2016-06-20 17:53:07

你不需要Zend\Http\Client。调用中间件时,将注入包含其所有数据的请求。zend表达式的动作中间件可能如下所示:

代码语言:javascript
运行
复制
<?php

namespace App\Action;

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Zend\Diactoros\Response\HtmlResponse;
use Zend\Expressive\Template\TemplateRendererInterface;

class ViewUserAction implements MiddlewareInterface
{
    private $template;

    private $userRepository;

    public function __construct(
        TemplateRendererInterface $template,
        UserRepository $userRepository
    ) {
        $this->template       = $template;
        $this->userRepository = $userRepository;
    }

    public function __invoke(Request $request, Response $response, callable $out = null)
    {
        $id   = (int) $request->getAttribute('id');
        $user = $this->userRepository->find($id);
        if (!$user) {
            return $out($request, $response->withStatus(404), 'Not found');
        }

        return new HtmlResponse($this->template->render('template', [
            'user' => $user,
        ]));
    }
}

表现力注入一个zend-分层请求对象,该对象包含获取请求数据所需的所有方法。

实现MiddlewareInterface是可选的,但我通常这样做。是的,它确实需要__invoke方法,因为这就是表达式调用中间件的方式。

您只使用中间件来操作请求和响应。对于任何其他方面,您仍然可以像以往一样使用来自任何框架的任何组件。

票数 1
EN

Stack Overflow用户

发布于 2016-06-21 02:23:14

如果我正确地阅读了你的问题,你只想在你的表达应用程序中使用Zend\Http\Client?

如果是这样的话,您就会对中间件的概念感到困惑。您不会使用HTTP客户端作为中间件,因为它不是中间件,也不是中间件。只是一个客户对象。如果您想在某些操作中使用HTTP客户端,您可以:

  1. 只需在需要时实例化/配置它,或
  2. 将其定义为您正在使用的任何DIC容器中的服务。

如果您计划在各种操作中使用类似配置的实例,并且希望删除一些初始配置,那么从容器中提取它是很好的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37918594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档