Zend framework2 后重定向的好处

Zend framework2 后重定向的好处,zend-framework2,Zend Framework2,当我开始使用ZF2时,我使用的第一个模块是ZfcUser。当我调试控制器的代码时,我发现了一种奇怪的方法(至少对我来说)来管理操作。我发现像这样的代码 $prg = $this->prg('zfcuser/changepassword'); if ($prg instanceof Response) { return $prg; } elseif ($prg === false) { return array(

当我开始使用ZF2时,我使用的第一个模块是ZfcUser。当我调试控制器的代码时,我发现了一种奇怪的方法(至少对我来说)来管理操作。我发现像这样的代码

    $prg = $this->prg('zfcuser/changepassword');

    if ($prg instanceof Response) {
        return $prg;
    } elseif ($prg === false) {
        return array(
            'status' => $status,
            'changePasswordForm' => $form,
        );
    }

    //VALIDATE FORM AND DATABASE STUFF
    (...)
行为如下:

  • 第一次加载$prg为false,因此它返回表单
  • 提交页面时,$prg是响应的实例,因此它返回$prg
  • 当返回$prg时,再次调用相同的函数,$prg将成为一个包含所有已发布数据的数组,因此它将跳转到表单和数据库内容的验证
  • 我认为这是一种奇怪的方法,所以我用简单的request->isPost()覆盖了所有需要的函数。我发现处理第一次发布的加载/数据更容易

    直到现在我才把它看得更重要。当我试图上传文件时,我又面临着Post-Redirect-Get方法:当表单上出现验证错误时,似乎需要防止用户重新选择文件并重新上传


    这篇文章的目的是什么?您建议什么时候使用它(除了已评论的文件上载)?

    如文档所述:

    当用户发送POST请求时(例如,在提交表单后),他们的浏览器将尝试保护他们不再次发送POST,从而破坏“后退”按钮,导致浏览器警告和弹出窗口,有时还会重新发布表单。相反,在接收POST时,我们应该将数据存储在会话容器中,并将用户重定向到GET请求

    所以这个插件的目的是改善用户体验。当您提交表单并尝试刷新页面时,您一定遇到了此问题,您会收到一条弹出消息,如(来自google chrome的示例):

    确认表单重新提交:您正在查找输入的已用信息的页面。返回到该页面可能会导致重复您采取的任何操作。你想继续吗

    您可以在文档中获取更多详细信息,或者如果您的表单处理文件上载

    注意:对于文件Post/Redirect/Get插件的示例用法,第16行有一个输入错误,您应该使用
    $this->filePrg()
    而不是
    $this->prg()
    。它应该与下面的行类似。

    $prg = $this->filePrg($myForm, '/user/profile-pic', true);