重定向到新的页面W / POST数据(PHP / Zend公司)(Redirect to new p

2019-07-02 17:58发布

我试图找出如何重定向到一个新的页面(不同的应用,控制器,动作),并维持当前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

在我exampleAction (化Zend_Controller_Action),我检查,看看是否var1 == foo ,如果确实如此我想重定向(302)到/ APP 2 /例如具有相同的POST数据。 也许事情是这样?

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一个新的HTTP请求,但我并不想简单地请求页面,并显示内容。 如果我仍然在寻找这样用一个Zend_Http_Client? 目前,我正在玩,像这样的东西:

$this->getResponse()->setRedirect('/app2/example/', 302);
$this->getResponse()->setBody(http_build_query($this->_request->getPost()));

我敢肯定,我想要做的是有可能通过欺骗和恶魔嬉闹的一些手段,但它绝对影射我。 任何帮助表示赞赏。

- RK

Answer 1:

而不是浏览器重定向到新的位置,为什么不转发从控制器到另一个控制器的要求?

return $this->_forward("action", "controller", "module");


Answer 2:

IMO你不能做POST重定向。 见http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3

前面已经说了,你可以保存你的调整后数据的会话。



Answer 3:

您可以使用一个控制器_request对象

$this->_request->setPost(array(
    'someKey' => 'someValue'
));

然后只需使用_forward保护方法

$this->_forward('yourAction', 'yourController', 'yourModule');

然后,在转发控制器动作只需要调用

$aPost = $this->_request->getPost();


Answer 4:

您可以使用重定向动作助手:

http://framework.zend.com/manual/1.12/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.redirector

这是为我工作。 它是从一个登录界面传递登录凭据到另一个。 307可能会导致浏览器以提醒重定向发生,303将重定向和填充下一页上的凭证,但不能提交第二种形式的用户。

$baseUrl = 'https://example.com';
$this->_redirector = $this->_helper->getHelper('Redirector');
$this->_redirector->setCode(307)
   ->setUseAbsoluteUri(true)
   ->gotoUrl($baseUrl . '/home/login',
        array('username' => $authForm->getValue('username'),
              'password' => $authForm->getValue('password')
        )
   );


Answer 5:

因为客户端处理服务器的响应后,重定向我不认为你可以做这件事。 火狐例如问他/她是否想POST数据重新发送到新的位置或没有用户。

一个讨厌的解决办法是,以填补,并返回包含了JavaScript的HTML表单和自动提交。 :/



Answer 6:

我不是太熟悉与Zend具体,但也有我会带您的问题,两种方法:

  1. 针对该请求的生命会话存储POST数据/重定向
  2. 设置重定向是一个POST,并且对数据进行编码。 而不是使用重定向,只需发送一个新的标头,POST,而不是GET。


文章来源: Redirect to new page w/ POST data (PHP/Zend)