PHP バージョンの制約により、Zend Expressive 2 を使用しています。パイプライン (IndexAction) のステップ 1 で変数を返すと、変数は正常に表示されます。
次のステップ (VerifyInputAction) に委譲し、入力にエラーがあると判断した場合は、ビュー スクリプトにエラーを返す必要があります。何らかの理由で、テンプレート レンダラーで渡す変数を使用しません。$data 配列変数ではなく、テンプレートをロードします。
テンプレート レンダラーとして Zend View を使用しています。
私のパイプラインは次のようになります。
インデックスアクション()
public function process(ServerRequestInterface $request, DelegateInterface $delegate)
{
if ($request->getMethod() !== "POST") {
return new HtmlResponse($this->template->render('app::home-page', ['error' => 'hello']));
} else {
$delegate->process($request);
//return new HtmlResponse($this->template->render('app::home-page'));
}
}
VerifyInputaction()
public function process(ServerRequestInterface $request, DelegateInterface $delegate)
{
$data = [];
$file = $request->getUploadedFiles()['recordsFile'];
$fileType = substr($file->getClientFilename(), strpos($file->getClientFilename(), '.'));
// If file type does not match appropriate content-type or does not have .csv extension return error
if (! in_array($file->getClientMediaType(), $this->contentTypes) || ! in_array($fileType, $this->extensions)) {
$data['error']['fileType'] = 'Error: Please provide a valid file type.';
return new HtmlResponse($this->template->render('app::home-page', $data));
}
$delegate->process($request);
}
この質問の範囲を超えている可能性のある別の問題には、パイプラインの次のアクションに進むときに、そこでビュースクリプトをレンダリングしようとすると、このエラーが発生することが含まれます...
Last middleware executed did not return a response. Method: POST Path: /<--path-->/ .Handler: Zend\Expressive\Middleware\LazyLoadingMiddleware
より多くのコード例を提供するために最善を尽くしますが、これは仕事上の問題であるため、問題が発生する可能性があります。
ありがとう!