Вам не нужен 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
, так как Expressive вызывает промежуточное ПО.
Вы используете только промежуточное программное обеспечение для управления запросом и ответом. Для чего-либо еще вы все равно можете использовать любой компонент из любой структуры, как вы всегда это делали.