我们应该如何将include_once class.login.php or
require_once class.login.php
(或其他模块)添加为PSR-7中间件?
我首先想到的是:
案例行动
Zend\Http\Client
实例Zend\Http\Client
实例,例如Zend\Http\Client
但我不确定这是否正确。它应该实施$client->request('GET');
并提供MiddlewareInterface
方法吗?
所以我要使用客户端。正如@timdex通过工厂提到的那样通过container->获取它。 谢谢两个=)
答案 0 :(得分:1)
您不需要Zend \ Http \ Client。调用中间件时会注入包含其所有数据的请求。一个表现敏捷的动作中间件可能看起来像这样:
<?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-stratigility request对象,其中包含获取请求数据所需的所有方法。
实现MiddlewareInterface
是可选的,但我通常会这样做。是的,它确实需要__invoke
方法,因为表达式是如何调用中间件的。
您只使用中间件来操纵请求和响应。对于其他任何事情,你仍然可以像往常一样使用任何框架中的任何组件。
答案 1 :(得分:1)
如果我正确地阅读了您的问题,您只想在您的富有表现力的应用中使用Zend \ Http \ Client进行一些操作吗?
如果是这样的话,你会对中间件概念感到困惑。您不会将HTTP客户端用作中间件,因为它不是中间件,也不会充当中间件。它只是一个客户端对象。如果您想在某些操作中使用HTTP客户端,您可以:
如果您打算在各种操作中使用类似配置的实例并且想要干掉一些初始配置,那么将其从容器中拉出是很好的。