2010-11-01 25 views
1

我目前正在使用ACL的zend框架站点上工作。从PHP Zend-Framework站点发送POST

ACL工作并使用数据库来存储privaliges。到目前为止,我所做的是,在preDispatch中捕获用户想要去的地方,如果他们需要登录到那里,页面将显示登录表单。我还捕获了用户是否提交了表单并存储了数据(位置和表单数据)。目前没有问题。

用户提交登录表单,然后我检查是否有位置发送给他们,这里再次没有问题,这是有效的。

不过,我希望能够以他们现在autherised提交原始表单数据 - 呼叫唯一的问题是,如果我将用户重定向到页面,来:

$this->getRequest()->isPost() 

因为它不是”失败发布帖子请求。

我可以将用户转发到成功登录的页面,并且在preDispatch中将$ _POST设置为原始捕获的数据,因为原始POST仍然有效,所以这种方式仍然有效,但我认为这不是正确的方法这样做 - 特别是URL - 显然页面显示正确,表单已被正确提交,但URL是登录过程。

很明显,我可以改变使用$this->getRequest()->isPost(),但由于有大量需要改变,我希望不必这样做。

+0

可能重复[重定向到新页面/ POST数据(PHP/Zend)](http://stackoverflow.com/questions/1309456/redirect-to-new-page-w-post-data-php- zend) – Gordon 2010-11-01 13:35:43

+0

这是非常相似的东西,但在同一时间不同 - 我目前基本上使用该解决方案,但正如我所说,我最终与用户显示POST的结果,但在错误的URL,这是不非常重要,但我更喜欢URL是正确的。 – Scoobler 2010-11-01 14:35:26

+0

@Scoobler检查Netbeans 7.0。它有很好的重构选项。您只需点击几下即可更改所有的选择。 – takeshin 2010-11-01 16:29:46

回答

0

通常的做法(在许多网站上都会看到这种方式)将会在会话中存储表单数据和请求的操作,然后将用户重定向到登录页面。当登录被授权时,您阅读会话以查看任何待处理操作,重新加载表单并使用会话中的数据填充它(正确地清除会话后的任何待处理操作)。用户只需再次点击提交。

另一种方法是使用HttpClient并以POST的形式提交数据。

+0

感谢这个想法,但在这里会有两个问题 - 我将动作和控制器配置给用户,直到他们的autoeisation过期(可能是超时),以便知道他们来自哪里并返回他们会更加耗费时间。我更希望它能在用户进行授权后立即继续用户的行为。你有没有关于使用HttpClient的更多细节 - 我尝试了文档说,但似乎没有得到它的工作,因为我想。 – Scoobler 2010-11-01 14:41:24

+0

您可以在这里找到Zend_Http_Client文档:http://framework.zend.com/manual/1.11/en/zend.http.client.advanced.html。另外,你可以在stream_context_create()中使用fopen(),就像这个例子一样:http://www.php.net/manual/en/function.stream-context-create.php#72017 – netcoder 2010-11-01 14:49:09

+0

我已经尝试了两种这些方法现在看起来似乎和zend转发请求的过程非常类似 - 它们提交数据并获取结果,然后在当前页面中显示它们 - 这留下了错误的URL。 – Scoobler 2010-11-01 16:49:32