Как мы должны добавить 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 упомянул через фабрику, чтобы получить его контейнером -> получить.
Спасибо обоим =)
Вам не нужен Zend \ Http \ Client. Запрос со всеми его данными вводится при вызове промежуточного программного обеспечения. Промежуточное программное обеспечение Zend-Expressive может выглядеть так:
<?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 Объект, который содержит все методы, необходимые для получения данных запроса.
Реализация MiddlewareInterface
необязательно, но я обычно делаю это. И да, это нужно __invoke
метод, так как именно так Expressive вызывает промежуточное программное обеспечение.
Вы используете промежуточное ПО только для манипулирования запросом и ответом. Для чего-либо еще вы можете использовать любой компонент из любой среды, как всегда.
Если я правильно читаю ваш вопрос, вы просто хотите использовать Zend \ Http \ Client для некоторых действий в вашем выразительном приложении?
Если это так, вы путаетесь с концепцией промежуточного программного обеспечения. Вы не будете использовать HTTP-клиент как промежуточное ПО, поскольку оно не является промежуточным ПО и не действует как промежуточное ПО. Это просто объект клиента. Если вы хотите использовать HTTP-клиент в некоторых действиях, вы можете:
Вытащить его из контейнера хорошо, если вы планируете использовать экземпляры с одинаковой конфигурацией в различных действиях и хотите высушить начальную конфигурацию.