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-stratigility requestオブジェクトを注入します。
MiddlewareInterface
の実装はオプションですが、通常これを行います。そして、Expressiveがミドルウェアを呼び出す方法であるので、それは__invoke
メソッドを必要とします。
ミドルウェアのみを使用してリクエストとレスポンスを操作します。何か他のものについては、いつものようにどんなフレームワークのコンポーネントも使えます。