当我开始使用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是Response的一个实例,因此它返回$ prg。
返回$ prg时,将再次调用相同的函数,并且$ prg成为包含所有已发布数据的数组,因此它跳转到表单和数据库内容的验证。
我认为这是一种怪异的方法,所以我重写了所有必需的函数,用简单的request-> isPost()替换了它。我发现处理发布的第一个负载/数据更容易。
直到现在,我才更加重视它。当我尝试上传文件时,我再次面对着Post-Redirect-Get方法:看来这是防止用户重新选择文件并在表单上出现验证错误时重新上传所必需的。
重定向后获取的目的是什么?您何时建议使用它(已上传评论文件的一部分)?
最佳答案
如文档所述:
当用户发送POST请求时(例如,提交表单后),他们的浏览器将尝试保护他们避免再次发送POST,破坏后退按钮,导致浏览器警告和弹出式窗口,有时还会重新发布表单。相反,当接收到POST时,我们应该将数据存储在会话容器中,并将用户重定向到GET请求。
因此,此插件的目的是改善用户体验。当您提交表单并尝试刷新页面时,您肯定会遇到此问题,您会收到类似(例如Google chrome的示例)的弹出消息:
确认表格重新提交:您正在寻找所输入信息的页面。返回该页面可能会导致您重复执行任何操作。你想继续吗?
您可以在文档中获取Post/Redirect/Get Plugin的更多详细信息,如果您的表单可以处理文件上传,则可以在File Post/Redirect/Get Plugin中获取更多详细信息。
注意:对于文件发布/重定向/获取插件-示例用法,第16行有错字,您应该使用$this->filePrg()
而不是$this->prg()
。它应该像下面的行。
$prg = $this->filePrg($myForm, '/user/profile-pic', true);
关于zend-framework2 - 重定向后获取的好处,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15861458/