Zend \ Http \ Client в качестве промежуточного программного обеспечения PSR-7 для Zend Expressive

Как мы должны добавить 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 упомянул через фабрику, чтобы получить его контейнером -> получить.
Спасибо обоим =)

0

Решение

Вам не нужен 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 вызывает промежуточное программное обеспечение.

Вы используете промежуточное ПО только для манипулирования запросом и ответом. Для чего-либо еще вы можете использовать любой компонент из любой среды, как всегда.

1

Другие решения

Если я правильно читаю ваш вопрос, вы просто хотите использовать Zend \ Http \ Client для некоторых действий в вашем выразительном приложении?

Если это так, вы путаетесь с концепцией промежуточного программного обеспечения. Вы не будете использовать HTTP-клиент как промежуточное ПО, поскольку оно не является промежуточным ПО и не действует как промежуточное ПО. Это просто объект клиента. Если вы хотите использовать HTTP-клиент в некоторых действиях, вы можете:

  1. Просто создайте / настройте его при необходимости или
  2. Определите его как службу в любом используемом вами контейнере DIC.

Вытащить его из контейнера хорошо, если вы планируете использовать экземпляры с одинаковой конфигурацией в различных действиях и хотите высушить начальную конфигурацию.

1

По вопросам рекламы [email protected]