我们应该如何添加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。谢谢双方=)
发布于 2016-06-20 17:53:07
你不需要Zend\Http\Client。调用中间件时,将注入包含其所有数据的请求。zend表达式的动作中间件可能如下所示:
<?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
方法,因为这就是表达式调用中间件的方式。
您只使用中间件来操作请求和响应。对于任何其他方面,您仍然可以像以往一样使用来自任何框架的任何组件。
发布于 2016-06-21 02:23:14
如果我正确地阅读了你的问题,你只想在你的表达应用程序中使用Zend\Http\Client?
如果是这样的话,您就会对中间件的概念感到困惑。您不会使用HTTP客户端作为中间件,因为它不是中间件,也不是中间件。只是一个客户对象。如果您想在某些操作中使用HTTP客户端,您可以:
如果您计划在各种操作中使用类似配置的实例,并且希望删除一些初始配置,那么从容器中提取它是很好的。
https://stackoverflow.com/questions/37918594
复制相似问题