Zend Expressive не передает переменные для просмотра скрипта - PullRequest
0 голосов
/ 01 мая 2019

Я использую Zend Expressive 2 из-за ограничений версии PHP.Если я возвращаю переменные на первом этапе конвейера (IndexAction), переменные выглядят просто отлично.

Если я делегирую на следующий шаг (VerifyInputAction) и определю, что во входных данных есть ошибка, мне нужно вернуть ошибкупосмотреть скрипт.По какой-то причине он не возьмет с собой переменные, которые я передаю с помощью средства визуализации шаблонов.Он по-прежнему будет загружать шаблон, но не с переменными массива $ data.

Я использую Zend View в качестве средства визуализации шаблонов.

Мой конвейер выглядит следующим образом.

IndexAction ()

    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

Я приложу все усилия, чтобы предоставить больше примеров кода, но из-за этой проблемы у меня могут возникнуть некоторые проблемыс этим.

Спасибо!

1 Ответ

0 голосов
/ 02 мая 2019

Последнее выполненное промежуточное ПО не вернуло ответа.Метод: POST Path: / <- path -> / .Handler: Zend \ Expressive \ Middleware \ LazyLoadingMiddleware

Для действия необходимо вернуть ответ.В вашем VerifyInputaction вы не вернете ответ, если нет действительного файла CSV.Я предполагаю, что это происходит в вашем случае, и $delegate->process($request); срабатывает, что, вероятно, не вызывает другое действие, которое возвращает промежуточное программное обеспечение.

Глядя на ваш код, имеет смысл позвонить VerifyInputactionво-первых, проверьте, если это сообщение и проверьте.Если что-то из этого не получится, перейдите к следующему действию, которое будет IndexAction.Это может отобразить форму с сообщением об ошибке.Вы можете передать сообщение об ошибке в запросе, как описано здесь: https://docs.zendframework.com/zend-expressive/v2/cookbook/passing-data-between-middleware/

Конвейер:

  • VerifyInputaction -> Проверить POST, проверить ввод -> перенаправить, если успех
  • IndexAction -> отображать шаблон и возвращать ответ

Я не вижу никакой причины в вашем коде, почему $ data не передается.Я предполагаю, что шаблон каким-то образом отображается в IndexAction, в котором нет данных $, но установлен error.Вы можете проверить это.Путаница заключается в том, что вы отображаете один и тот же шаблон в двух разных действиях.Используя решение, которое я упомянул, вам нужно только визуализировать его в IndexAction.

...