后重定向的好处 - 获取

时间:2013-04-07 10:41:56

标签: zend-framework2

当我开始使用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
    (...)

行为如下:

  1. 第一个加载$ prg为false,因此返回表单。
  2. 当您提交页面时,$ prg是Response的实例,因此它返回$ prg。
  3. 当返回$ prg时,再次调用相同的函数,$ prg成为包含所有发布数据的数组,因此它跳转到表单和数据库内容的验证。
  4. 我认为这是一种奇怪的方法,所以我用简单的请求替换所有需要的函数 - > isPost()。我发现更容易处理发布的第一个加载/数据。

    直到现在我才更加重视它。当我尝试上传文件时,我再次面临Post-Redirect-Get方法:似乎需要阻止用户重新选择文件并在表单上出现验证错误时重新上传。

    后重定向有什么意义?你什么时候推荐使用它(除了注释文件上传之外)?

1 个答案:

答案 0 :(得分:1)

正如文件所述:

  

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

因此,此插件的目的是改善用户体验。当您提交表单并尝试刷新页面时,您必须遇到此问题,您会收到一条弹出式消息(例如来自Google Chrome):

  

确认表单重新提交:您要查找的页面使用了您输入的信息。返回该页面可能会导致您重复执行任何操作。你想继续吗?

如果您的表单处理文件上传,您可以在Post/Redirect/Get PluginFile Post/Redirect/Get Plugin的文档中获取更多详细信息。

注意:对于文件发布/重定向/获取插件 - 示例用法第16行有拼写错误,您应该使用$this->filePrg()而不是$this->prg()。它应该像下面这一行。

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