我正在尝试弄清楚如何重定向到新页面(不同的应用程序、控制器、操作)并维护当前的POST数据。
我的应用程序正在验证POST数据,如果满足特定条件,我希望重定向到不同的位置,但要确保POST数据作为POST数据传递到新页面。下面是一个粗略的例子:
POST /app1/example HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
var1=foo&var2=bar
在我的示例(Zend_Controller_Action)中,我检查var1 == foo
,如果是,我想用相同的POST数据重定向(302)到/app2/ exampleAction
。像这样的东西吗?
HTTP/1.x 302 Found
Location: /app2/example
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
var1=foo&var2=bar
我可以看到如何使用Zend_Http_Client创建一个新的超文本传输协议请求,但我并不打算简单地请求页面并显示内容。不管怎样,我应该继续使用Zend_Http_Client吗?目前,我正在玩这样的东西:
$this->getResponse()->setRedirect('/app2/example/', 302);
$this->getResponse()->setBody(http_build_query($this->_request->getPost()));
我确信我想要做的事情可能是通过一些诡计和恶作剧的方式实现的,但这绝对是在暗示我。任何帮助都是非常感谢的。
rk
发布于 2009-08-21 00:11:30
与其将浏览器重定向到新位置,为什么不直接将请求从控制器转发到另一个控制器呢?
return $this->_forward("action", "controller", "module");
发布于 2009-08-21 09:17:50
我想你不能用POST做重定向。请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3
如前所述,您可以在会话中保存您的帖子数据。
发布于 2013-03-07 02:09:10
您可以使用控制器_request对象
$this->_request->setPost(array(
'someKey' => 'someValue'
));
然后简单地使用_forward保护的方法
$this->_forward('yourAction', 'yourController', 'yourModule');
然后,在转发的控制器操作中只需调用
$aPost = $this->_request->getPost();
https://stackoverflow.com/questions/1309456
复制相似问题